2014-07-17 37 views
3
typedef long a; 
extern a int c; 

嗨上面的代码中给出了类似In function 'main': Line 7: error: two or more data types in declaration specifiersç的typedef

但是当同样的“A”在第二行是由长取代它工作完全正常的错误。 这工作完全正常

typedef long a; extern long int c;

请解释为什么会发生这种情况

+0

正如你可以看到[点击这里] [1]长已经是一个类型 [1]:http://en.wikipedia.org/wiki/C_data_types –

+0

,'long'被视为'的缩写长整型“。 “int”意味着例如“long int int”。 – BLUEPIXY

回答

4

long int是一个类型名。

type-alias-name type-name被解析为即使type-alias-namelongtype-nameint别名两种类型。

3

A typedef不是宏。

一旦你有一个typedef你不再有文本“INT”那正好可以与文字“长”作出新的类型合并。这是它自己的一流类型,它会在同一个声明中与另一类型冲突。