使用前的C声明

问题描述:

C中的所有标识符在使用之前都需要声明,但我不能在C99标准中找到它所表示的位置。使用前的C声明

我认为它也是指宏定义,但只定义了宏扩展顺序。

C99:TC3 6.5.1§2,脚注79明确说明:

因此,未声明的标识符是违反语法。

结合6.2.1§5:

除非另有明确规定,[...]它[即标识符]指的是在该实体 相关名称空间,其声明在标识符 出现的位置可见

和§7:

[...]的任何其它标识符具有范围,只是其声明符完成后开始。

+0

那么,什么是“未申报”呢?我的意思是,如果标识符在使用后声明,为什么称为“未声明”?谢谢。 – 2011-01-26 13:15:44

有一个至少几个例外,所有的标识需要在使用前delcared规则:

  • 而C99去除隐函数声明,你仍然可以看到C程序是可能在不知不觉中依靠它们。例如,甚至有关于SO的偶然问题,问为什么返回double的函数不起作用(当包含函数声明的头部被省略时)。看起来,在使用C99之前的语义进行编译时,未声明函数的警告通常不会被配置为使用或被忽略。

  • goto标签的标识符可能在'声明'之前使用 - 它的语法外观(后面跟着一个:和一个语句)隐式声明。

的例外为goto标签规则是几乎无用的鸡蛋里挑骨头,但功能标识符可以不用声明中使用的事实(预C99)的东西,可以知道,因为你可能有用偶尔会遇到问题,并将其视为根本原因。

另外,标识符可以在预处理之前(严格地说,在被定义之前)被使用,在那里它们可以被测试以被定义或不被定义,或者在预处理器表达式中被使用,否则它们将评估为0否则定义。