|
1
31
你有 定义 (不只是声明)头中的变量。 如果包含来自多个源文件的此头文件,则行为为 未定义 . 以下是标准的相关引用:
您依赖于gcc特有的(实际上对许多编译器都是通用的,但仍然是非标准的)行为,它合并了重复的
实验性的
数据定义。请参阅帮助
假设使用此语言扩展,其中一个定义(具有显式初始值设定项的定义)初始化变量以指向字符串文字。但是如果省略这个定义,它将保持零初始化。也就是说,它将是一个常量空指针。不是很有用。
长话短说,永远不要这样做。要在头中声明(但不定义)全局变量,请使用
|
|
2
14
您的示例之所以工作是因为调用了C(而不是C++)的Fortran灵感(MIS)特性。 暂定定义 ( 6.9.2p2 )它通常但不标准地扩展到多个文件。
暂定定义是变量声明,没有
我不知道如何使用C编译器来获得针对这一点的警告。 这个
不管我怎么尝试,似乎都能和GCC合作。(
例子: V.C:
主C
编译和链接:
(我去掉了第二个
使用禁用的或带有C++的临时定义,头中的所有变量声明都应该具有
版本H:
对于每个全局,您应该只有一个定义,并且该定义应该有一个初始值设定项或不带初始值设定项
C版:
|
|
3
6
在
而在
编辑:
此外,还需要确保只有一个源文件定义了变量
|