为什么gcc编译器允许在不给出数据类型的情况下分配值?

时间:2015-07-21 09:43:07

标签: c gcc

实际上,我错误地键入了以下语句,但编译器允许我执行语句而不会抛出任何错误。我的代码是,

unsigned  i=3;

为什么gcc允许在不提供数据类型的情况下分配值?那是gcc的工作方式吗?

3 个答案:

答案 0 :(得分:5)

C11标准,章节§6.7.2,类型说明符,类型说明符列表显示为,

  

...
   - intsignedsigned int
   - unsignedunsigned int
  ...

和“语义学”说,

  

每个以逗号分隔的多个集合都指定相同的类型,......

所以,基本上,unsignedunsigned int指的是同一类型,可以认为是可以互换的。

同样的逻辑适用于intsignedsigned int

所以,回答你的问题,

  

为什么gcc编译器允许在不给出数据类型的情况下分配值?

unsigned本身是一个类型说明符,与unsigned int相同。所以,基本上,这里的数据类型缺失

答案 1 :(得分:4)

声明变量unsigned与在C中声明变量unsigned int相同。请检查此Wikipedia link on C data types以了解有关它的更多信息。

所以,gcc正确处理它并编译好。

答案 2 :(得分:2)

this page汇总,signedunsignedshortlong都隐式声明int,除非另有说明(例如long double)。