在c中使用“extern”命令来共享变量

时间:2015-04-27 00:04:57

标签: c header extern

我有以下代码:

(1)extern_test.h:

extern int give_something;

(2)extern_test.c:

#include <stdio.h>
#include "extern_test.h"
int give_something = 10;

(3)extern_test2.c:

#include <stdio.h>
#include "extern_test.h"

int main()
{
    printf("%i\n", give_something);
    return 0;
}

现在当我在终端上编译extern_test2.c时,它说“未定义引用'give_something'”....请帮助为什么这不起作用..

1 个答案:

答案 0 :(得分:0)

&#34;未定义参考&#34;意味着代码很好,但是一旦编译完所有不同的文件并且有时间将它们链接在一起,其中一个文件没有#you>#39 ;寻找(在这种情况下,give_something)。这称为链接器错误。

问题很可能是您没有为编译器使用正确的命令行 - 您尝试将extern_test.cextern_test2.c编译为两个单独的二进制文件。因此,当您编译extern_test.c时,它可以正常工作,但是当您尝试编译extern_test2.c时,它无法找到该变量,因为它是在extern_test.c中声明的。

假设您正在使用g ++,请使用以下命令行:

g++ extern_test.c extern_test2.c

注意它们是如何编译在一起的。有一些更高级的命令允许您将每个命令分别编译成目标文件,然后使用第三个命令将它们一起链接,但这不是必需的这里。