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

时间:2015-06-08 17:11:05

标签: c++ linkage

我将这个问题作为this帖子的后续问题提出来。他们说extern块声明有外部联系而不是内部联系,但我不确定原因:

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

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

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

它说extern声明有内部联系。使用变量和函数时为什么会有区别?

1 个答案:

答案 0 :(得分:0)

因为变量“i”具有静态存储。所以,就你的代码而言,

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

此外,您可能会发现此讨论很有趣: Understanding static storage class in C