c-如果包含文件,文件中的全局变量是否可访问



当我试图在我的C项目中使用main中包含的一些全局变量时,我有一种奇怪的行为。

我的设置是这样的,我有一个名为global.h的文件,其中包含需要从多个文件访问的变量。

包含使用全局变量并对其进行更改的特定函数的文件,通过extern关键字引用这些函数。

我的main.c包括所有这些文件(还有global.h)。当我试图访问main.c中的一个全局变量时,我会得到某种奇怪的行为,它似乎会改变所有全局变量。

我试着把它分解成以下代码。下面的代码似乎和我预期的一样工作,这意味着main.c包含了global.h中的a,并且可以更改它

main.c

#include "globals.h"
#include "functions.c"
int main ()
{
printf ("a = %dn", a);
foo ();
printf ("a = %dn", a);
a = 3;
printf ("a = %dn", a);
foo ();
printf ("a = %dn", a);
a = 4;
printf ("a = %dn", a);
return 0;
}

functions.h

#ifndef GLOBALTEST_FUNCTIONS_H
#define GLOBALTEST_FUNCTIONS_H
extern a;
#endif //GLOBALTEST_FUNCTIONS_H

functions.c

#include "functions.h"
void foo() {
a = 2;
}

global.h

#ifndef GLOBALTEST_GLOBALS_H
#define GLOBALTEST_GLOBALS_H
int a = 0;
#endif //GLOBALTEST_GLOBALS_H

output

a = 0
a = 2
a = 3
a = 2
a = 4

然而,在我的另一个应用程序中似乎并非如此。

所以我想知道的是:不同的调用是否会更改相同的变量a?我可以通过包含global.h来访问这些全局变量吗?还是应该用其他方式访问?我想知道这是在C中定义的,还是我应该去寻找bug。

全局变量在包含后可以访问,但需要声明。

相关内容

  • 没有找到相关文章

最新更新