众所周知,extern "C"
向 C++ 函数声明会使它的名字具有 C 链接,从而使 C 代码能够链接。
我的问题是 - 我们可以让 C++ 函数名称链接到其他编程语言吗,比如extern "Lisp"
or extern "FORTRAN"
?
如果不是,为什么?限制的背后的内部结构是"C"
什么?
有哪些替代方案?
C++ 标准 7.5.2 dcl.link 说:
可以使用链接规范来实现 C++ 和非 C++ 代码片段之间的链接:
linkage-specification: extern string-literal { declaration-seqopt} extern string-literal declaration
字符串文字指示所需的语言链接。本国际标准规定了字符串文字“C”和“C++”的语义。有条件地支持使用除“C”或“C++”之外的字符串文字,并具有实现定义的语义。[注意:因此,具有实现未知的字符串文字的链接规范需要诊断。—end note ] [ 注意:建议字符串文字的拼写取自定义该语言的文档。例如,Ada(不是 ADA)和 Fortran 或 FORTRAN,取决于年份。——尾注]
所以原则上,实现者可以选择支持除 C 和 C++ 之外的其他链接规范。
然而在实践中,在所有现代平台上,C 链接是最小的公分母。作为一般规则,如今,C 以外的语言的二进制互操作使用 C 链接。在广泛使用的现代平台上,除了 C 和 C++ 链接之外,您不会看到任何东西。