使用前的C声明

时间:2011-01-26 13:02:19

标签: c

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

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

2 个答案:

答案 0 :(得分:5)

C99:TC36.5.1§2,脚注79明确说明:

  
    

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

  

与6.2.1§5:

一起使用
  
    

除非另有明确说明,[...] [即标识符]指的是     相关名称空间中的实体,其声明在标识符处可见     发生

  

和§7:

  
    

[...]任何其他标识符的范围都在其声明者完成之后开始。

  

答案 1 :(得分:2)

规则中至少有几个例外情况,所有标识符在使用前都需要进行delcared:

  • 虽然C99删除了隐式函数声明,但您仍可能看到可能在不知不觉中依赖它们的C程序。甚至在SO上偶尔会出现一个问题,例如,问为什么返回double的函数不起作用(当省略包含函数声明的标题时)。似乎在使用前C99语义进行编译时,未声明函数的警告通常不会被配置为使用或被忽略。

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

goto标签规则的例外几乎是无用的挑剔,但事实上函数标识符可以在没有声明的情况下使用(在C99之前)是有用的,因为你可能知道偶尔会遇到一个问题,因为它是一个根本原因。

此外,标识符可以在预处理中被“声明”(严格来说,在定义之前)之前使用,可以在其中测试它们是否被定义,或者在预处理器表达式中使用它们将评估为{{1}如果没有另外定义。