为什么函数f4的名称具有内部链接而不是C语言链接?

Ale*_*der 5 c++ linkage language-lawyer

[dcl.link]/4中的第五个例子说明如下:

extern "C" {
    static void f4(); // the name of the function f4 has internal linkage (not C language linkage)
                      // and the function’s type has C language linkage.
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?为什么函数的名称f4具有内部链接,而不是C语言链接?

PS:我是从语言律师的角度问这个.也就是说,如何从标准中的规范段落中得出上述评论声明?

Bar*_*rry 5

从同一部分,强调我的:

在链接规范中,指定的语言链接适用于所有函数声明符的函数类型,具有外部链接的函数名称,[...]

但是,f4声明了static,这意味着每个[basic.link]/3名称都有内部链接:

具有命名空间作用域的名称具有内部链接,如果它的名称为:

  • 显式声明的变量,函数或函数模板static; 要么, [...]

因此,C链接不适用.