我正在使用gcc编译许多.c文件。让我们说以下是这样的:
C文件是:
main.c
tree.c
头文件是:
tree.h
我在tree.h
中声明了一些golbal变量。让我们说以下是指定值的全局变量:
int fanout = 5;
之前我在main()
文件中保留了 tree.c
个功能。链接没有问题。但现在我想保持主要功能分开。我刚刚在新创建的.c
文件中移动了main函数。现在的问题是,它
显示链接错误:
main.o error: fanout declared first time
tree.o error: multiple declaration of fanout.
请让我知道如何摆脱这个问题。
提前致谢,
答案 0 :(得分:3)
如果在多个源文件中包含声明和定义int fanout
的头文件,则会破坏一个定义规则。
根据ODR,在一个翻译单元中只能有一个变量定义(标题文件+源文件)
为了避免它,
您需要使用extern
关键字。三个简单的步骤:
extern
变量在tree.h
:
extern int fanout;
在其中一个c文件(tree.c
)中定义变量。
#include "tree.h"
extern int fanout = 5;
然后,您将tree.h
包含在要访问fanout
的任何源文件中。
在main.c
:
#include "tree.h"
int main()
{
fanout = 10;
return 0;
}