7

众所周知,extern "C"向 C++ 函数声明会使它的名字具有 C 链接,从而使 C 代码能够链接。

我的问题是 - 我们可以让 C++ 函数名称链接到其他编程语言吗,比如extern "Lisp"or extern "FORTRAN"

如果不是,为什么?限制的背后的内部结构是"C"什么?

有哪些替代方案?

4

1 回答 1

4

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++ 链接之外,您不会看到任何东西。

于 2014-01-31T16:07:59.310 回答