在两个.c文件之间共享全局变量

8 浏览
0 Comments

在两个.c文件之间共享全局变量

大家好,我想知道如何在.c文件之间共享全局变量。

我尝试了以下代码,但仍然出现错误。

test.c文件:

#include 
int max = 50;
int main() 
{
  printf("max %d", max); // 输出 max 50
}

pass.h文件:

extern int max;

passed.c文件:

#include 
#include "pass.h"
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)

有人可以帮忙吗?非常感谢。

0
0 Comments

在C语言中,如果想要在多个文件中共享一个全局变量,就需要特殊的操作。下面我们来看一下在一个.c文件中共享全局变量的问题以及解决方法。

问题的原因是,C语言中默认情况下,每个文件都有自己独立的命名空间。这意味着在一个文件中声明的变量,在其他文件中无法直接访问。然而,有时候我们需要在多个文件中共享一个全局变量,这就需要进行一些特殊的处理。

解决方法是,我们可以在一个头文件中声明全局变量,然后在一个.c文件中定义这个变量。具体操作如下:

首先,在一个名为declareGlobal.h的头文件中声明全局变量:

extern int max;

然后,在一个名为test.c的文件中定义并初始化这个全局变量。在定义之前,别忘了包含声明变量的头文件:

#include "declareGlobal.h"
int max = 50;

接下来,我们可以在任意文件中使用这个全局变量,只需要记得包含声明变量的头文件。例如,如果想要在passed.c中使用这个全局变量,可以按照如下方式操作:

#include 
#include "declareGlobal.h"
#include "test.c"
int main()
{
    printf("pass %d \n", max);
    return 0;
}

注意,不要使用#include "declareGlobal.c"来包含定义变量的文件,这是错误的操作。应该使用#include "declareGlobal.h"来包含声明变量的头文件。

总结起来,要在多个文件中共享一个全局变量,我们需要在一个头文件中声明该变量,然后在一个.c文件中定义并初始化该变量。其他文件只需要包含声明变量的头文件,就可以使用这个全局变量了。这样就能够实现全局变量在多个文件中的共享。

0
0 Comments

这个问题的出现是因为有两个程序,而数据(如变量)不能简单地在程序之间共享。

你可能希望阅读关于共享内存和其他进程间通信方法的内容。

如果你只想要一个程序,并在另一个文件中使用一个定义的变量,那么你的做法是错误的。在一个程序中只能有一个main函数,所以从一个源文件中删除main函数。同时,在pass.c中,表达式max;没有任何作用,你不需要它。

然后在编译时同时传入两个文件,像这样:

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

执行上述命令后,你将会得到一个名为my_program的可执行程序。

0