可以通过 C++ 宏 __cplusplus
判定:
#ifdef __cplusplus
#include <iostream>
cout << "C++";
#else
#include <stdio.h>
printf("C");
#endif
那么 __cplusplus
是什么?
__cplusplus
是 cpp
中定义的宏,当使用 C++ 编译器时,就会定义该宏。
在程序开发中,尤其是在 C 和 C++ 混合编写的代码中,我们经常在头文件中看到这样的代码:
#ifdef __cplusplus
extern "C" {
#endif
// C 代码
#ifdef __cplusplus
}
#endif
头文件会被 #include
到 C 文件中进行编译,也可以被 #include
到 C++
文件中进行编译。那么这里就可以使用 __cplusplus
来测试头文件是由 C
编译器还是 C++
编译器编译的。
如果定义了 C++ 宏 __cplusplus
,表示这段代码会将被 C++ 编译器编译,并加入 "extern "C" {"
和 " }"
处理其中的代码。
那 extern "C"
又是什么?
我们知道在 C++ 中,函数是可以发生重载的,在 C 中,是没有重载的说法的。如果头文件中函数声明用 extern “C”
修饰过后,就不可以发生重载了,代码将会按照 C 的编译方式编译.