为什么这段代码无效?
typedef int INT;
unsigned INT a=6;
而以下代码有效
typedef int INT;
static INT a=1;
根据我的理解,unsigned int
不是"simple type specifier"
,因此代码格式不正确。我不确定。
任何人都可以指向Standard
的相关部分,它使第一个代码无效(第二个代码有效)吗?
修改
虽然Johannes Schaub's答案似乎是正确的并且到了这一点(他已经删除了他的答案BTW)但我接受了James Curran的答案,因为它的正确性和准确性。
答案 0 :(得分:29)
typedef
与宏不同。它们不仅仅是文本替换。 Typedef会创建一个新的类型名称。
现在,当您说unsigned int
时,unsigned
不是添加到int
的修饰符。 unsigned int
是完整的类型名称;它碰巧有一个空间。
因此,当您说typedef int INT;
时,INT
就是完整的类型名称。它无法修改。
static
(如const
)是存储类说明符。它实际上并不是类型名称的一部分。
答案 1 :(得分:12)
答案 2 :(得分:2)
不要忘记typedefing不像宏定义;在你的例子中,似乎你认为你的INT应该被视为文字int
。从编译器的角度来看,typedef定义了类型别名,但是在“语法”级别没有看到这种情况(typedef-ed类型在语法级别上类似于“native”类型);因为在那个级别,在char long short或int之前允许unsigned,你的unsigned INT
被看作是unsigned
之前的“type”(与char,long,short,int“不同”)。