1
27
也见 What are extern variables in C . 在资料性附录J的C标准中,这是一个常见的扩展:
警告正如@litb在这里指出的,正如我对交叉引用问题的回答中所述,对一个全局变量使用多个定义会导致不定义的行为,这是标准的说法“任何事情都可能发生”。可能发生的事情之一是程序的行为如你所期望的那样;J.5.11大致上说,“你可能比你应得的更幸运”。但是一个依赖于一个外部变量的多个定义的程序——有或没有显式的“extern”关键字——并不是一个严格一致的程序,也不能保证在任何地方都能工作。相当于:它包含 缺陷 可能会出现,也可能不会出现。 |
2
9
标准有一个叫做“公共扩展”的东西,只要变量初始化一次,就允许多次定义变量。见 http://c-faq.com/decl/decldef.html 链接页面说这与Unix平台有关——我猜C99和C89也是一样的——不过也许它已经被更多的编译器采用,形成某种破坏标准。有趣。 |
3
7
这是为了澄清我对OLOVB评论的回答: 从“int x;”编译的对象文件的NM输出。在这个平台上,符号前面加了一个“u”,也就是说,变量x显示为x。
从“int x=1”编译的对象文件的NM输出;
从“int x=0;”编译的对象文件的NM输出;
从“extern int x;”编译的对象文件的NM输出
编辑:从“extern int x”编译的对象文件的NM输出;其中x实际用于其中一个函数
|
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |