声明与c中的定义

时间:2011-11-08 17:49:12

标签: c

最近在学习c编程时,我注意到了一些我觉得有趣的东西。我曾经读过像int i=0;这样的语句是强制定义的唯一方法,而像extern int i;这样的语句意味着强制声明。像int i;这样的语句将取决于上下文。但是当我将extern与extern int i=13;之类的初始化结合起来时会发生什么。编译器生成警告。但这条规则是什么呢?

4 个答案:

答案 0 :(得分:5)

这是编码样式警告 对此的论证是代码是有效的,但对于C来说非常单一,因为“extern”通常被认为意味着声明不提供对象的定义。

extern int i=13;  

声明并定义i,而:

extern int i;      

只声明变量i

GCC上已经提出了具体的 bug 45977 ,但它仍然显示未确认状态。

错误报告指出代码在语法上符合C标准。它有一个讨论,详细讨论了这一点。


Standerdese粉丝:
相关章节参考文献:
ansi c99标准6.2.2:标识符的链接
ansi c99标准6.9.2.4

答案 1 :(得分:4)

声明变量时,只需将名称绑定到该变量即可。

定义变量时,为其保留内存。

当你将变量声明为extern时,你告诉编译器“这是在其他地方定义的,并且在链接时可用”,所以可以使用它。

答案 2 :(得分:0)

如果要从不同程序访问特定变量,则使用Extern。由于您在程序中没有任何定义,因此编译器会给您一个错误。

答案 3 :(得分:0)

在C中,定义只是一个恰好分配存储的声明(无论是因为它有一个初始化器,还是因为它是一个用作定义的暂定定义)。所以,你可以对声明做的一切(比如指定它有extern存储),你也可以做一个定义。

请注意,这与C ++不同。