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

时间:2017-07-27 18:43:14

标签: c++ language-lawyer 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。:我是从语言律师的角度问这个问题的。也就是说,如何从标准中的规范性段落中得出上述评论声明?

1 个答案:

答案 0 :(得分:5)

从同一节开始,强调我的:

  

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

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

  

具有命名空间范围的名称具有内部链接,如果它的名称为:

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

因此,C链接不适用。