在 c 中使用 "extern" 命令共享变量

Using "extern" command in c for sharing a variable

我有以下代码:

(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 时,它显示 "undefined reference to 'give_something'"...请帮助解释为什么这不起作用..

"Undefined Reference" 意味着代码 编写 很好,但是一旦编译了所有不同的文件并且是时候将它们 link 在一起,一个的文件没有您要查找的内容(在本例中为 give_something)。这称为 linker 错误。

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

中声明的

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

g++ extern_test.c extern_test2.c

注意它们是如何一起编译的。有一些更高级的命令可以让你将每一个单独编译成一个 目标文件 ,然后 link 然后将它们全部编译成第三个命令,但这里没有必要。