在 c 中使用"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("%in", give_something);
    return 0;
}

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

"未定义的引用"意味着代码编写得很好,但是一旦编译了所有不同的文件并且需要将它们链接在一起,其中一个文件就没有您要查找的内容(在本例中为 give_something)。这称为链接器错误。

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

假设您使用的是 g++,请使用以下命令行:

g++ extern_test.c extern_test2.c

请注意它们是如何编译在一起的。有一些更高级的命令允许您将每个命令单独编译到一个对象文件中,然后使用第三个命令将它们全部链接在一起,但这里没有必要。

最新更新