使用前的C声明
答
C99:TC3 6.5.1§2,脚注79明确说明:
因此,未声明的标识符是违反语法。
结合6.2.1§5:
除非另有明确规定,[...]它[即标识符]指的是在该实体 相关名称空间,其声明在标识符 出现的位置可见。
和§7:
[...]的任何其它标识符具有范围,只是其声明符完成后开始。
答
有一个至少几个例外,所有的标识需要在使用前delcared规则:
而C99去除隐函数声明,你仍然可以看到C程序是可能在不知不觉中依靠它们。例如,甚至有关于SO的偶然问题,问为什么返回
double
的函数不起作用(当包含函数声明的头部被省略时)。看起来,在使用C99之前的语义进行编译时,未声明函数的警告通常不会被配置为使用或被忽略。goto
标签的标识符可能在'声明'之前使用 - 它的语法外观(后面跟着一个:和一个语句)隐式声明。
的例外为goto
标签规则是几乎无用的鸡蛋里挑骨头,但功能标识符可以不用声明中使用的事实(预C99)的东西,可以知道,因为你可能有用偶尔会遇到问题,并将其视为根本原因。
另外,标识符可以在预处理之前(严格地说,在被定义之前)被使用,在那里它们可以被测试以被定义或不被定义,或者在预处理器表达式中被使用,否则它们将评估为0
否则定义。
那么,什么是“未申报”呢?我的意思是,如果标识符在使用后声明,为什么称为“未声明”?谢谢。 – 2011-01-26 13:15:44