外部变量声明没有内部链接

Extern variable declaration does not have internal linkage

本文关键字:内部 链接 变量 声明 外部      更新时间:2023-10-16

我问这个问题是为了跟进这篇文章。他们说extern块声明有外部链接而不是内部链接,但我不确定为什么:

static int i = 0; // #1
void g() {
    extern int i; // #3 external linkage
}

为什么外部声明不采用i的链接(内部链接)?帖子中的引用似乎允许这样做。在OP的引号后面的例子中,它有:

static void f();
void g() {
    extern void f(); // internal linkage
    // ...
}

,它表示外部声明具有内部链接。为什么使用变量和函数有区别?

因为变量"i"具有静态存储。那么,在你的代码片段中,

  • 省略"static"语句将产生"no linkage"
  • 应用"static"语句将产生"外部链接"(因为静态存储是C/c++运行时基础结构中非常特殊的一部分)。

同样,你可能会发现这个讨论很有趣:C语言中的静态存储类