【问题标题】:Redeclaration of 'x' with no linkage [duplicate]重新声明没有链接的“x”[重复]
【发布时间】:2020-03-25 15:02:50
【问题描述】:

当我在全局范围内重新声明变量 x 时,此代码可以正常工作:

#include <stdio.h>
#include <stdlib.h>

int x = 12;
int x;

int main() {
  printf("%d", x);
  return 0;
}

然而,这段代码给了我一个错误:“redeclaration of 'x' with no links”

#include <stdio.h>
#include <stdlib.h>
int main() {
  int x = 12;
  int x;
  printf("%d", x);

  return 0;
}

我了解到,不允许多次重新定义,但允许重新声明。这仅适用于全局变量吗?

【问题讨论】:

标签: c variables scope


【解决方案1】:

链接和声明的规则很复杂,很难总结。在某种程度上,它们随着时间的推移而发展,规则必须适应用旧规则编写的旧软件。

本例的相关规则在C 2018 6.7 3:

如果标识符没有链接,则在相同范围和相同名称空间中的标识符声明(在声明符或类型说明符中)不得超过一个,除了:

——可以重新定义 typedef 名称以表示与当前相同的类型,前提是该类型不是可变修改的类型;

——标签可以按照 6.7.2.3 中的规定重新声明。

您的标识符不是 typedef 名称或结构或联合标记,并且它没有链接,因为它是在没有 extern 的块内声明的,因此在该范围内不应有超过一个声明。

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2011-04-24
    相关资源
    最近更新 更多