【问题标题】:What is this double declaration mean in C? [duplicate]这个双重声明在 C 中是什么意思? [复制]
【发布时间】:2012-11-08 17:33:25
【问题描述】:

可能重复:
Redefinition allowed in C but not in C++?

#include<stdio.h>
int i;
int i;
int main()
{
        // int i;
        // int i;
        printf("%d\n",i);
        return 0;
}
~          

上面的代码运行没有任何错误gcc -Wall -Werror demo.c -o demo

但是当我取消注释 local i 变量时,注释掉 global i ,它给了我错误。

In function ‘main’:
demo.c:7:6: error: redeclaration of ‘i’ with no linkage
demo.c:6:6: note: previous declaration of ‘i’ was here

这里的本地全局概念是什么?任何人请解释一下。

【问题讨论】:

  • 它会给你什么错误?

标签: c global local


【解决方案1】:

在 C99 中(更具体的参见第 6.2 节),全局声明默认具有外部链接(6.2.2§5)。在那种情况下(6.2.2§2), i 的两个声明都引用同一个对象。相反,局部变量没有链接(6.2.2§6),因此应该引用唯一标识符(同样是 6.2.2§2):因此,您最终会在相同的范围,这是不允许的(6.2.1§5:由相同标识符指定的不同实体要么具有不同的范围,要么位于不同的名称空间中

【讨论】:

    【解决方案2】:

    如果所有定义都同意(都具有相同的类型)并且变量在不超过一个位置初始化,则您可以在全局范围内定义多个变量。

    J.5.11 多个外部定义

    一个对象的标识符可能有多个外部定义,无论是否显式使用关键字 extern;如果定义不一致,或者初始化了多个,则行为未定义 (6.9.2)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-20
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      相关资源
      最近更新 更多