C++编译器可以编译这样的代码,并且可以正确执行

#include <stdio.h>
int main() {
    printf("test...\n");
    return 0;
}

我认为printf.c将使用c编译器编译为printf.o,我只是检查了stdio.h,没有extern“C”关键字,那么c++链接器如何将printf.o链接到printf.o中,而后者是用c编译器编译的(顺便说一句,我的平台是ubuntu 14.04,编译器是gcc 4.8.4)

最佳答案

没有人不知道您使用的是哪种实现,就无法给您确切的答案。

干杯和hth。 -Alf提供了一种可能性,那就是C++程序所包含的stdio.h可能与C程序所包含的stdio.h不同。另一种可能性是,它是相同的 header ,并且有一个extern "C"块,您根本看不到它。例如,我使用gcc,我的/usr/include/stdio.h包含一个__BEGIN_DECLS宏,当编译为C++时,该宏会扩展为extern "C" {。参见Do I need an extern "C" block to include standard C headers?

10-04 21:17
查看更多