当我尝试使用一些包含在C项目main中的全局变量时,我的行为很奇怪。
我的设置是这样的,我有一个名为global.h
的文件,其中包含需要从多个文件访问的变量。
包含使用全局变量并对其进行更改的特定功能的文件,请通过extern
关键字引用这些文件。
我的main.c包括所有这些文件(也包括global.h
)。当我尝试从main.c
访问全局变量之一时,出现某种奇怪的行为,它似乎改变了所有全局变量。
我试图将其分解为以下代码。以下代码似乎按我的预期工作,这意味着main.c
包含了a
中的global.h
,并且可以对其进行更改。
main.c
#include "globals.h"
#include "functions.c"
int main ()
{
printf ("a = %d\n", a);
foo ();
printf ("a = %d\n", a);
a = 3;
printf ("a = %d\n", a);
foo ();
printf ("a = %d\n", a);
a = 4;
printf ("a = %d\n", 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搜索。
答案 0 :(得分:0)
包含全局变量后可以访问,但是需要声明它们。