#ifdef __cplusplus 宏命令的使用


一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C++虽然常被认为是C的超集,但是C++的编译器还是与C的编译器不同的。C中调用C++中的代码这样定义会是安全的。一般的考虑跨平台使用方法如下:

代码开头:

#if defined(__cplusplus) || defined(c_plusplus)
extern "C"
{
#endif

代码结尾:

#if defined(__cplusplus) || defined(c_plusplus)
}
#endif


 网上其他人做过如下总结和分析:

原文链接:http://blog.csdn.net/thanklife/article/details/7362893

结论:

首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,代码的含义是: 如果这是一段cpp的代码,那么加入extern"C"{和}处理其中的代码。要明白为何使用extern"C",还得从cpp中对函数的重载处理开始说起。在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等.而在C中,只是简单的函数名字而已,不会加入其他的信息.也就是说:C++和C对产生的函数名字的处理是不一样的.

其次,为什么需要使用extern"C"呢?C++之父在设计C++之时,考虑到当时已经存在了大量的C代码,为了支持原来的C代码和已经写好C库,需要在C++中尽可能的支持C,而extern"C"就是其中的一个策略。试想这样的情况:一个库文件已经用C写好了而且运行得很良好,这个时候我们需要使用这个库文件,但是我们需要使用C++来写这个新的代码。如果这个代码使用的是C++的方式链接这个C库文件的话,那么就会出现链接错误. 之所以会出现链接过不去的错误,是因为链接器找不到函数。因此,为了在C++代码中调用用C写成的库文件,就需要用extern"C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。比如,现在我们有了一个C库文件,它的头文件是f.h,产生的lib文件是f.lib,那么我们如果要在C++中使用这个库文件,我们需要这样写:

extern "C" {
#include "fun.h"
}
原文地址:https://www.cnblogs.com/learnopencad/p/4064006.html