您好我想知道如何在.c文件之间共享全局变量 我尝试添加以下代码,但仍然会出错。
test.c文件
#include <stdio.h>
int max = 50;
int main()
{
printf("max %d", max); // result max 50
}
pass.h
extern int max;
passed.c
#include <stdio.h>
#include "pass.h"
max;
int main()
{
printf("pass %d \n", max);
return 0;
}
但是当我编译pass.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)
有人可以帮忙吗?非常感谢你。
答案 0 :(得分:2)
问题在于你有两个程序,而且只能在程序之间共享数据(如变量)。
您可能希望了解shared memory和其他inter-process communication方法。
另一方面,如果您只想拥有一个程序,并使用另一个文件中定义的变量,那么您仍然做错了。您在一个程序中只能有一个main
函数,因此从其中一个源文件中删除main
函数。同样在pass.c
中,max;
表达式无效,您也不需要它。
然后在编译时传递两个文件,如
$ clang -Wall -g test.c pass.c -o my_program
在上面的命令之后,你(希望)有一个名为my_program
的可执行程序。
答案 1 :(得分:2)
您可以在头文件中声明变量,例如让我们在declareGlobal.h-
中说//declareGlobal.h
extern int max;
然后你应该在一个且唯一的文件中定义变量,例如让我们说,test.c。请记住包含声明变量的头文件,例如在这种情况下,declareGlobal.c
//test.c
#include "declareGlobal.h"
int max = 50;
然后,您可以在任何文件中使用此变量 - 只需记住将头文件包含在声明的位置(即declareGlobal.c),例如,如果要在pass.c中使用它,则可以执行以下操作:
//passed.c
#include <stdio.h>
#include "declareGlobal.h"
#include "test.c"
int main()
{
printf("pass %d \n", max);
return 0;
}