gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:22:16 24 4
gpt4 key购买 nike

当我尝试使用我的 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 = %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

输出

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

但是,在我的其他应用程序中似乎并非如此。

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

最佳答案

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

关于c - 如果包含文件,文件中的全局变量是否可以访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com