我试图了解 C 全局变量可以在多个文件(编译单元)之间共享的方式。我在这里阅读了出色的问答。然而,在做了一些测试之后,我仍然有一些我没有得到的东西:
基本上我的问题是:如果在没有关键字的头文件中声明(但未定义)变量extern
,是否可以简单地将该头文件包含在各种编译单元中以便使所有这些编译单元都可以使用该变量?在这种情况下,暗示一个(也是唯一一个)编译单元包含用于初始化(定义?)该变量的代码,并且在其他编译单元尝试对该变量执行任何操作之前,它将首先被调用。如果这一切都是真的,那么这个过程就是所谓的“隐式外部”吗?
我将用一个例子来说明我的问题:
标题“MyCommonHeader.h”包含:
//MyCommonHeader.h
int* i; //pointer to an int
文件 MyFirstHeader.h 包含:
//MyFirstHeader.h
void changeIt(int newValue);
文件 MyFirstSource.c 包含:
//MyFirstSource.c
#include "MyFirstHeader.h"
void changeIt(int newValue) {
*i = newValue;
}
文件 MySecondSource.c 包含:
//MySecondSource.c
#include "MyCommonHeader.h"
#include "MyFirstHeader.h"
void main() {
i = malloc(sizeof(int));
changeIt(10);
*i = 23;
}
上面的代码是否在所有地方都使用相同的 i 变量?我需要在extern
任何地方添加吗?