C89标准中的哪个部分允许"隐含int"规则?

时间:2014-10-21 13:56:24

标签: c standards language-lawyer c89 implicit-int

使用gcc时代码:

register a = 3;
static b = 3;

在使用-std=c89 -pedantic-errors标志时允许它,尽管有警告。

然而,它会收到-std=c99 -pedantic-errors标志的错误。

我想知道C89标准的哪一部分允许“隐式整数”规则?

1 个答案:

答案 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