
[英]Using extern keyword to define global variable over multiple source files
[英]Confusion about the extern keyword and multiple source files
我试图完全理解 extern 是如何工作的,所以我创建了 3 个文件,其中两个是源文件,最后一个是 header 文件。 这是它们每个中包含的内容: testingfile1.c
#include <stdio.h>
#include "testingheader.h"
int main() {
change();
int my_extern;
printf("\n%d", my_extern);
return 0;
}
测试文件2.c:
#include <stdio.h>
#include "testingheader.h"
void change() {
int my_extern;
my_extern = 15;
printf("%d", my_extern);
}
测试头文件.h:
#if !defined(TESTINGHEADER_H)
#define TESTINGHEADER_H
#include <stdio.h>
extern int my_extern;
void change();
#endif
这个程序的 output 是:15 0。但是,我认为由于 my_extern 是一个 extern int,如果你要更改为一个源文件中的值,它的值将在所有其他源文件中更改。 这不是 extern 的工作方式,还是我在代码本身做错了什么?
在这两种情况下删除int my_extern;
你有它,因为它们成为局部变量,恰好具有相同的名称my_extern
。
extern int my_extern;
只是意味着有一个名为my_extern
的 int “在某处”。 因此,您必须在文件 scope 的某处声明int my_extern
,例如:
int my_extern = 0;
void change() {
my_extern = 15;
printf("%d", my_extern);
}
在 testingfile2.c 中, my_extern
变量是 function 的本地变量,您看不到 extern 命令引用的全局my_extern
。 当然,您没有全局my_extern
,所以这是另一个问题。 如果您实际上尝试引用 extern 命令正在引用的全局my_extern
,您将收到 linker 错误。
问题是您要重新声明int my_extern;
在你的函数里面。 因此, C 将其视为与全局my_extern
不同的变量。
语句extern int my_extern;
是一个名为my_extern
的全局int
将在某处声明的声明。 你没有这样做。 相反,您创建了本地my_extern
变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.