可以通过 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 的编译方式编译.