最近在学习C编程时,我注意到了一些有趣的事情。我曾经读过这样的内容,像 int i=0;
这样的语句是唯一强制定义的方式,而像 extern int i;
这样的语句则意味着强制声明。而像 int i;
这样的语句则取决于上下文。但是当我将 extern 和初始化结合起来使用,例如 extern int i=13;
,编译器会生成警告。但是这个规则是什么呢?
最近在学习C编程时,我注意到了一些有趣的事情。我曾经读过这样的内容,像 int i=0;
这样的语句是唯一强制定义的方式,而像 extern int i;
这样的语句则意味着强制声明。而像 int i;
这样的语句则取决于上下文。但是当我将 extern 和初始化结合起来使用,例如 extern int i=13;
,编译器会生成警告。但是这个规则是什么呢?
这是一条编码风格警告。
其原因是代码虽然合法,但在C语言中极不符合惯例,因为“extern”通常被认为是声明不提供对象定义。
extern int i=13;
声明并定义i
,同时:
extern int i;
仅声明变量i。
在GCC上提出了一个特定的45977号错误,但仍显示未经确认状态。
该错误报告指出,代码在C标准上是语法正确的。并且有一次讨论详细讨论了这个问题。
对于Standerdese Fans:
相关章节参考资料为:
ANSI C99标准6.2.2:标识符的链接性和
ANSI C99标准6.9.2.4
当你声明一个变量时,你只是给它绑定了一个名称。
当你定义一个变量时,你为它保留了内存。
当你将一个变量声明为extern时,你告诉编译器“这个变量在别处已经被定义,在链接时会可用”,所以可以使用它。
如果你想从不同的程序中访问特定的变量,可以使用Extern。由于你的程序中没有对该变量进行定义,因此编译器会报错。
extern
存储)也可以对定义执行。