我试图完全理解extern的工作原理,所以我创建了3个文件,其中两个是源文件,最后一个是头文件。这是每个中包含的内容:testingfile1.c
#include <stdio.h>
#include "testingheader.h"
int main() {
change();
int my_extern;
printf("\n%d", my_extern);
return 0;
}
testingfile2.c:
#include <stdio.h>
#include "testingheader.h"
void change() {
int my_extern;
my_extern = 15;
printf("%d", my_extern);
}
testingheader.h:
#if !defined(TESTINGHEADER_H)
#define TESTINGHEADER_H
#include <stdio.h>
extern int my_extern;
void change();
#endif
该程序的输出是:150。但是,我认为my_extern是一个extern int,如果要更改一个源文件中的值,那么它将在所有其他源文件中更改它的值。这不是extern的工作方式吗,还是我在代码本身中做错了什么?
在两种情况下,都将int my_extern;
移到您拥有的位置,因为它们变成了碰巧具有相同名称my_extern
的局部变量。
extern int my_extern;
只是意味着“在某处”存在一个称为my_extern
的整数。因此,您必须在文件范围的某个地方声明int my_extern
,例如这样:
int my_extern = 0;
void change() {
my_extern = 15;
printf("%d", my_extern);
}
问题是您在函数内部重新声明了int my_extern;
。因此,C将其视为与全局my_extern
分开的变量。]>
extern int my_extern;
语句声明将在某个地方声明名为int
的全局my_extern
。您还没有做到。而是创建了本地my_extern
变量。
在testingfile2.c中,'my_extern'变量是该函数的本地变量,您没有看到extern命令所引用的全局'my_extern'。当然,您没有have