实际上,我错误地键入了以下语句,但编译器允许我执行语句而不会抛出任何错误。我的代码是,
unsigned i=3;
为什么gcc
允许在不提供数据类型的情况下分配值?那是gcc
的工作方式吗?
答案 0 :(得分:5)
从C11
标准,章节§6.7.2,类型说明符,类型说明符列表显示为,
...
-int
,signed
或signed int
-unsigned
或unsigned int
...
和“语义学”说,
每个以逗号分隔的多个集合都指定相同的类型,......
所以,基本上,unsigned
和unsigned int
指的是同一类型,可以认为是可以互换的。
同样的逻辑适用于int
,signed
和signed int
。
所以,回答你的问题,
为什么gcc编译器允许在不给出数据类型的情况下分配值?
unsigned
本身是一个类型说明符,与unsigned int
相同。所以,基本上,这里的数据类型缺失。
答案 1 :(得分:4)
声明变量unsigned
与在C中声明变量unsigned int
相同。请检查此Wikipedia link on C data types以了解有关它的更多信息。
所以,gcc正确处理它并编译好。
答案 2 :(得分:2)
由this page汇总,signed
,unsigned
,short
和long
都隐式声明int
,除非另有说明(例如long double
)。