如果在一个块中引用了具有内部链接的变量,我是否需要在该块中使用extern关键字?

问题描述

我正在尝试在范围和链接的范围内细化变量声明的所有细微差别。

请考虑以下两个代码段:


代码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 (将#修改为@)