【发布时间】:2010-05-19 19:18:19
【问题描述】:
我有一个包含 100 多个全局变量的包含文件。它正在库中使用,但我将库链接到的某些程序也需要访问全局变量。
它的建造方式:
// In one library .c file
#define Extern
// In the programs that use the globals
#define Extern extern
// In the .h file
Extern int a,b,c;
我很难理解为什么最初的程序员会这样做,所以我删除了定义外部的东西。现在我想我在stackoverflow的帮助下理解了关于TU的事情: 1, 2, 3.
现在我明白我应该在库中的一个 .c 文件中定义全局变量,并在 .h 文件中使用 extern。问题是我不想重复代码。
我应该回到那个#define Extern voodoo 吗?
【问题讨论】:
-
很抱歉最近出现,但接受的答案是错误的方法。 Frederik Slijkerman 的答案是正确的。只有 .h 文件中的声明和 .c 文件中的定义。
extern var是一个声明,没有extern它是一个定义。将变量的定义放在模块(即 .c 文件)中,它是逻辑(语义)的一部分。相反,从不在 .c 文件中使用extern var。