[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。:我是从语言律师的角度问这个问题的。也就是说,如何从标准中的规范性段落中得出上述评论声明?
答案 0 :(得分:5)
从同一节开始,强调我的:
在链接规范中,指定的语言链接适用于所有函数声明符的函数类型,具有外部链接的函数名称,[...]
但是,f4
被声明为static
,这意味着该名称每个[basic.link]/3都有内部链接:
具有命名空间范围的名称具有内部链接,如果它的名称为:
- 显式声明为
static
的变量,函数或函数模板;或者,[...]
因此,C链接不适用。