使用gcc
时代码:
register a = 3;
static b = 3;
在使用-std=c89 -pedantic-errors
标志时允许它,尽管有警告。
然而,它会收到-std=c99 -pedantic-errors
标志的错误。
我想知道C89标准的哪一部分允许“隐式整数”规则?
答案 0 :(得分:15)
在C89中允许隐式int 规则的部分将是3.5.2
类型说明符部分,其中显示(强调我的) :
int,signed,signed int,或没有类型说明符
Keith Thompson在评论中指出,在C90中该部分为6.5.2
并且说,唯一的区别是ISO要求的一些介绍性材料,导致部分重新编号。
在C99这里发生了变化,该部分为6.7.2
类型说明符,它说:
int,signed或signed int
文件N661: Disallow implicit "int" in declarations中也提到了这一点:
6.5.2类型说明符中的更改;添加新句子 约束第一段的开头: 至少应给出一种类型说明符 声明中的声明说明符。
Change in 6.5.2 Type specifiers, Constraints, from: -- int, signed, signed int, or no type specifiers to: -- int, signed, or signed int