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

Why is it the case that the name of the function f4 has internal linkage, and not a C language linkage?

[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.
}

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

P.S.: 我是从语言律师的角度问这个问题的。也就是说,如何从标准中的规范性段落中推导出上面的注释语句?

在同一部分,强调我的:

In a linkage-specification, the specified language linkage applies to the function types of all function declarators, function names with external linkage, [...]

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

A name having namespace scope has internal linkage if it is the name of:

  • a variable, function or function template that is explicitly declared static; or, [...]

因此,C 链接不适用。