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

问题描述 投票:0回答:1

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

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

包含使用全局变量并更改它们的特定函数的文件,通过extern关键字引用它们。

我的main.c包含所有这些文件(也就是global.h)。当我尝试从main.c访问一个全局变量时,我得到某种奇怪的行为,这似乎改变了所有的全局变量。

我试图将其分解为以下代码。下面的代码似乎按照我的预期工作,这意味着main.c包括来自aglobal.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。

c include global-variables
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.