为什么函数名 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 链接不适用。
[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 链接不适用。