2010-08-16 150 views

回答

2

这是一个沉重的执行细节。但是我所知道的大多数C++编译器都不会尝试做任何特殊的事情来区分C函数和非C++函数。只是简单的旧的cdecl调用约定。

有点重要,因为具有像printf()这样的函数的CRT实现与C++编译器一样可以使用来自同一供应商的C++编译器。没有人想要维护它的两个版本。

+0

作为参考,“extern”C“因子如何? – cHao 2010-08-16 23:06:04

+1

@cHao它停止了C++为支持运算符重载而停止的名称修饰,例如'foo(int)'和'foo(double)'可能在编译器发出的程序集中转换为'foo_int'和'foo_double',但是'extern“C”foo(int)'和'extern“C”foo双)'都简单地转换为'foo' – 2010-08-16 23:13:27

+0

它改变了链接器所看到的标识符的名称。关闭C++名称修改。所有传统的CRT函数都在C++编译器看到的声明中是extern“C”。 – 2010-08-16 23:14:22

3

C++编译器'做正确的事情'并为C函数使用正确的调用约定 - 一个蹩脚的听起来的答案,但我不知道还有更多的可以说!