我试图在范围和链接的上下文中确定变量声明的所有细微差别。
考虑以下两个代码片段:
代码 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
带有 extern声明的代码 2块
#include <stdio.h>
static int i=4;
int main()
{
{
extern int i;
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是否只是执行代码 1 的一种“礼貌”、用户友好的方式(即您是在通知读者,“嘿……这个变量i已在此文件的其他地方定义”?)。那么extern' 以这种方式使用是否只是满足某种约定?