<P> C++和C在编程语言方面享有特别好的链接时间关系。任何一种语言编写的函数都可以从另一种语言的代码中调用(只要所有代码都是用一致的工具链编译的),而且这两种语言共享一组“意思相同”的通用基本类型。在</p>
<p>为了举例说明,考虑一个简单的库函数<code>foo</code>取一个整数并返回一个整数。首先,我们可以编写两种语言都有效的头文件:</p>
<p><lib.strong></p>
<pre><code>#ifndef H_FOO
#define H_FOO
#ifdef __cplusplus
extern "C" {
#endif
int foo(int);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // H_FOO
</code></pre>
<p>接下来,我们可以提供实现这个函数的C代码:</p>
<p><strong>lib\u impl.c:</strong></p>
^{pr2}$
最后,我们可以从C++中使用这个库:</p>
<p><strong>附录cpp:</strong></p>
<pre><code>#include "foo.h"
struct XYZ {
XYZ(int n) : data_(foo(n)) {}
private:
int data_;
};
int main() { XYZ(10); }
</code></pre>
<p>在链接时,<code>app.cpp</code>翻译单元中的外部符号<code>foo</code>可以与来自{<cd5>}翻译单元的导出符号<code>foo</code>匹配,即使它们是从不同的语言编译的。两种语言中的类型{{CD6}}意思是“相同”,在这一意义上,调用C++中的函数^ {< CD7> }导致正确调用,就像C代码调用了具有参数^ {< CD7> }的函数。类型^ {< CD6> }以相同的方式表示,并且调用约定在两种语言中都是相同的。在</p>
<>这个C和C++的基本方面,它不是任何形式的标准,但实际上是普遍的,是核心的兼容性特征之一,它允许新的C++程序在大量的现有代码上建立,并且与许多操作系统API(通常提供为C API)交互地“原生”地交互。在</p>
<P>类似的链接时间互操作由许多工具链提供,其中目标代码是在汇编中编写的(在这里你需要更密切地关注相关的调用约定),并且它也与FORTRAN(通常需要用Fortran的类型匹配C和C++基本类型)。其他的,最近的语言也可以提供与C(直接,用C++和FORTRAN的迂回方式)的“直接”的跨链接性,或者,否则它们可能需要一个更重的库“外部功能接口”,这是关于它如何指定由外语提供的功能(例如java和go)更冗长的。在</p>