【发布时间】:2021-02-08 17:30:01
【问题描述】:
我在文件 a.c 中有以下程序:
#include<stdio.h>
#include"b.c"
int main(void){
extern int a;
a+=2;
printf("%d\n",a);
return 0;
}
文件b.c如下:
int a=1;
现在我使用 extern 关键字来声明变量 a,但没有定义它。 因此,我可以更改它的内容,打印它会打印 3。
我不明白的是,如果我从 a.c 中删除 extern int a; 行,程序也会运行并且输出仍然是 3。
我认为要更改 b.c 中的变量,您必须使用 extern 关键字。
这里发生了什么?
【问题讨论】:
-
你的“include”实际上是将b.c中的代码复制粘贴到a.c中,对代码没有逻辑影响
-
在上面的代码中,去掉
extern int a;这一行并没有什么区别,因为a的定义已经在作用域内,即从main可见,由于#include。但是如果你只放弃extern,这会有所作为;a将成为main的本地变量,与b.c中定义的变量不同。