为什么不允许使用extern long int c?

时间:2013-09-15 08:40:03

标签: c

当我做

之类的事情时
typedef long a;
extern a int c;

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

修改

typedef long a;
extern a c;

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

4 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:8)

因为当你typedef时,它变成了自己的全新类型。它现在不能用作修饰语。

答案 2 :(得分:0)

a已经很长了。你说有一个long int类型,叫做。

请参阅http://tigcc.ticalc.org/doc/keywords.html#short隐含的int有多长

答案 3 :(得分:-2)

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