我在两个不同的文件中声明了一些静态变量(比如 var1 和 var2)。变量在两个文件中具有相同的名称。有些变量(比如 var1)没有在它们的声明中初始化,有些是(var2),如下所示。
file1.h
static bool var1;
static bool var2 = false;
file2.h
static bool var1;
static bool var2 = false;
根据我的理解,静态变量仅限于它们在其中声明的 c 文件(或 h 文件),因此在多个头文件中使用相同的变量名应该是安全的。但是当我编译代码时,我得到错误“redefinition of var2”,仅针对已初始化的变量。
- 为什么这个错误只发生在 var2 上?
- 我的实现没问题吗?
编辑: 由于有人提到使用 extern 关键字,我想澄清一下,var1 和 var2 在不同的 c 文件中应该有不同的值,并且应该只限于它们各自的文件,
最佳答案
没有。 var1
的多重声明是可以的,但是var2
的多重定义 不是。您不能将变量初始化两次...即使值相同。
我使用预处理器防护解决此类问题,例如:
#if !defined(MY_APP__VARS_DEFINED)
static int var1, var2=0;
#define MY_APP__VARS_DEFINED
#endif
即便如此,我也不建议在多个头文件中重复定义。这是一个维护问题。迟早,有人可能会更改一个 header 中的初始值,而找不到定义它的所有其他 header 。这也会使重命名(“重构”)变得更加困难。 (...并且违反了 DRY Principle 。)
不过,您可能需要重新考虑您的设计。全局变量通常会导致脆弱的应用程序;更难维护且容易损坏。
关于c - 错误 : redefinition of "a static variable" in C header files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51135935/