要在这里设置场景 - 我有 2 个 .c 文件,将其命名为 a.c
和b.c
.
然后,每个 .c 文件有 2 个头文件 a.h
(它具有所有函数原型(prototype),以及声明为 extern type name;
的所有全局变量)和 b.h
其中只有 b.c
的函数原型(prototype)如b.c
不包含全局变量。
我想访问a.c
b.c
中的全局变量,所以我添加了一条声明 #include "a.h"
在b.c
。
唯一的问题是,我仍然无法访问 a.c
b.c
中的全局变量,例如如果我想打印。我有一个全局变量 int i;
在a.c
,如果我这样做:
i = 5;
printf("%d", i);
在b.c
,我收到一条错误消息,指出变量 i 尚未声明。我做错了什么?
代码:
a.c:
#include "b.h"
int i;
int main() {
executeMethod();
return 0;
}
b.c:
#include "a.h"
void executeMethod() {
i = 10;
printf("%d", i);
啊:
int main();
extern int i;
b.h:
void executeMethod();
生成文件:
CFLAGS=-墙-g
all: main
main: a.c b.c a.h b.h
gcc $(CFLAGS) -o main a.c b.c a.h b.h
clean:
rm -f main
也尝试过不使用 makefile: gcc -o main a.c b.c a.h b.h
谢谢。
编辑:如果我定义 extern int i;
就可以了在我的b.c
之上文件,但假设我有 60 个变量,我宁愿将它们放在 header.h 文件中,而只是 #include "header.h"
而不是编写 50 个 extern 语句。
最佳答案
继续并在两个文件中包含带有 ext 的 header 。将定义和初始化放在拥有该变量的文件中。这没关系:
extern int aaa;
int aaa = 1;
关于无法从一个 .c 文件访问另一个 .c 文件中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876661/