我正在重写某人的代码,该代码具有一个全局变量,该变量在初始化期间(在Java将其回调到C中之后)很有用。看来他们已经在几个地方用extern
前缀声明了此变量,一次没有声明。我真的不明白为什么g_
我宁愿调用它static
并只声明一次它对全局变量(前缀)执行此操作。
static
在这种情况下,我能够做到这一点还是对线程安全性有负面含义?我的代码大部分是C ++,但是有些extern 'C'
东西像Java调用的那些函数一样。
目前,我没有使用extern
,static
但我倾向于认为这就是为什么我会出现链接错误。
static
不能防止在多个编译单元的编译期间重复变量。当您链接这些编译单元时,它们最终将看到同一变量的不同“实例”。换句话说,每个人都会看到自己的副本。
的作用extern
恰恰是避免这种重复。您static
在实现文件(.c
)中声明了全局(非)变量,并extern
在给定的头文件(.h
)上声明了该变量,该变量将由依赖它的每个源文件包括在内。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句