c - extern 关键字似乎没有任何作用
问题描述
我在文件 ac 中有以下程序:
#include<stdio.h>
#include"b.c"
int main(void){
extern int a;
a+=2;
printf("%d\n",a);
return 0;
}
文件 bc 如下:
int a=1;
现在我使用 extern 关键字来声明变量 a,但没有定义它。因此,我可以更改它的内容,打印它会打印 3。
我不明白的是,如果我extern int a;
从 ac 中删除该行,程序也会运行并且输出仍然是 3。
我认为要更改 bc 中的变量,您必须使用 extern 关键字。
这里发生了什么?
解决方案
以这个程序为例:
#include<stdio.h>
void main()
{
extern int y;
printf("%d",y);
}
int y=10;
这个的输出是:
10
extern
是一个声明,而不是一个定义。
它没有定义变量,这意味着它没有给它任何内存。它只声明变量,以便您可以使用它。
在您的示例中,您不必声明a
它已经定义的简单原因,因为这#include
基本上是将粘贴代码复制到您的程序中。
如果你搬家
#include"b.c"
在程序的底部,您需要该extern
语句,因为y
尚未定义。
旁注:如@John Bollinger所说extern
,如果它有等号,则可以是一个定义。但是,在您的示例中,情况并非如此。
推荐阅读
- javascript - React Native iOS Api 调用不起作用
- javascript - 单击时JQuery搜索下一个和上一个文本出现更改格式
- java - 使用杰克逊将浮点数格式化为定点
- android - 我想实现一个从底部弹出的布局
- java - 如何为复选框制作方法并在另一种方法中调用它?
- firebase - firebase 只导入所需的包
- c# - “AdalDistributedTokenCache”的命名空间是什么
- javascript - nodejs:如何防止发送模块缓存控制覆盖htaccess缓存
- angular - ngModel 在表单标签内不起作用
- python - 带孔的匀称多边形联合结果