问题描述
我正在尝试在范围和链接的范围内细化变量声明的所有细微差别。
请考虑以下两个代码段:
代码1 阻止而没有 extern
声明
#include <stdio.h>
static int i=4;
int main()
{
{
i++;
printf("i is %d \n",i);
i++;
}
printf("i is %d \n",i);
i++;
printf("i is %d \n",i);
return 0;
}
输出为:
i is 5
i is 6
i is 7
代码2 使用 extern
声明阻止
#include <stdio.h>
static int i=4;
int main()
{
{
extern int i;
i++;
printf("i is %d \n",i);
return 0;
}
输出为:
i is 5
i is 6
i is 7
鉴于这两个代码段生成相同的输出,我将假设它们在“幕后”以相同的方式起作用(即编译器生成相同的结果可执行文件)。
所以这是问题:
代码2 仅仅是执行代码1的一种“礼貌”的,用户友好的方式(即,您正在通知读者,“嘿...此变量i
已定义此文件中的其他位置”?)。这样extern
的使用是否仅满足某种约定?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)