2

嗨,我只是想知道如何在 .c 文件之间共享全局变量。
我尝试添加以下代码,但仍然出现错误。

测试.c 文件

#include <stdio.h>

int max = 50;
int main() 
{
  printf("max %d", max); // result max 50
}

通过.h

extern int max;

通过.c

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

max;

int main()
{    
    printf("pass %d \n", max);

    return 0;
}

但是当我编译passed.c我得到跟随错误

Undefined symbols for architecture x86_64:
"_max", referenced from:
  _main in passed-iOMugx.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

任何人都可以帮忙吗?太感谢了。

4

2 回答 2

4

您可以在头文件中声明变量,例如在 declareGlobal.h-

//declareGlobal.h
extern int max; 

然后,您应该在一个且唯一的文件中定义变量,例如 test.c。请记住包含声明变量的头文件,例如在本例中为 declareGlobal.c

//test.c
#include "declareGlobal.h"
int max = 50;

然后你可以在任何文件中使用这个变量——只要记住在头文件中包含它声明的地方(即declareGlobal.c),例如,如果你想在passed.c中使用它,你可以执行以下操作:

//passed.c
#include <stdio.h>
#include "declareGlobal.h"
#include "test.c"
int main()
{
printf("pass %d \n", max);
return 0;
}
于 2013-10-16T04:36:36.347 回答
2

问题是你有两个程序,数据(如变量)不能简单地在程序之间共享。

您可能想了解共享内存和其他进程间通信方法。


另一方面,如果您只想拥有一个程序,并使用在另一个文件中定义的变量,那么您仍然做错了。一个程序中只能有一个函数,因此请从其中一个源文件中main删除该函数。main同样在pass.c表达式max;中什么也不做,你也不需要它。

然后在编译时传递这两个文件,比如

$ clang -Wall -g test.c pass.c -o my_program

在上述命令之后,您将(希望)有一个名为my_program.

于 2013-10-16T04:25:43.100 回答