1

当我做类似的事情时

typedef long a;
extern a int c;

它给了我错误:。two or more data types in declaration specifiers为什么?

编辑

typedef long a;
extern a c;

工作正常。那么为什么不在上面呢?

4

4 回答 4

12

它是 typedef,而不是宏。编译器看不到extern long int c,它看到extern a int c,其中包含两种不同的类型(aint)。

于 2013-09-15T08:42:24.033 回答
8

因为当你typedef的东西变成它自己的、全新的类型时。它现在不能用作修饰符。

于 2013-09-15T08:42:33.133 回答
0

a 已经是一个长整数。您是说有一种类型是 long int,称为 a。

有关隐含 int 的长度,请参见http://tigcc.ticalc.org/doc/keywords.html#short

于 2013-09-15T08:59:46.010 回答
-2

Lsiebert 给出了正确的答案。当声明中省略基类型时,假定为 int。所以,long = long int。当您声明“extern a int c”时,编译器会将其转换为“extern long int int c”。这将导致错误。

于 2013-12-19T06:55:20.477 回答