无法从一个 .c 文件访问另一个 .c 文件中的全局变量

标签 c global

要在这里设置场景 - 我有 2 个 .c 文件,将其命名为 a.cb.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/

相关文章:

c - *pt in int (*pt)[2] 和 pt in int *pt 有什么区别?

C printf 说明符 %lld 打印字符 "ld"

c - 将数组的起始地址对齐为 32 位的倍数?

function - PowerShell 和全局函数

python - 名称 'net_input' 未定义,即使它在全局中

C++ 外部指针

c++ - PC与Arduino串口通信

c - 向双向链表末尾插入一个元素

c - 使用 OpenSSL 从内存中读取公钥/私钥