C/C++ 宏区分不同系统、编译器、语言版本

区分不同系统

1)_WIN32,Windows系统
_WIN64:32bit and 64bit系统
M_WIN64:仅64bit Windows系统
M_WIN32:仅32bit Windows系统
_WINDOWS:GUI Application
_CONSOLE:console Application

2)__APPLE__,苹果系统,包括MAC、IOS

TARGET_IPHONE_SIMULATOR:IOS模拟器
TARGET_OS_IPHONE:IOS设备
TARGET_OS_MAC:MAC系统

3)__ANDRIOD__,安卓系统

4)__linux__,linux系统

5)__unix__,所有unix系统

6)_POSIX_VERSION,符合POSIX标准的系统
其他标准还有__FreeBSD__等.

区分不同编译器及其版本

1)MSVC:Microsoft Visual C++编译器
_MSC_VER:不同版本的MSVC编译器,对应不同的Visual Studio版本,如1928对应Visual Studio 2019

2)__GNUC__:GNU gcc编译器;
__GNUG__:GNU g++编译器

__GNUC____GNUC_MINOR____GNUC_PATCHLEVEL__:gcc主版本号、次版本号、修正版本号

__GNUC_PATCHLEVEL__是gcc 3.0以后才有

Linux下命令行输入$gcc -version,可确认gcc版本号。

Linux发行版gcc编译器通常写作GNU GCC

3)__clang__:clang编译器
__clang_major____clang_minor__:clang主、次版本号

LLVM是编译器的工具链集合,Clang是使用LLVM的编译器。

4)__MINGW32__:MinGW编译器

MinGW是Windows上gcc的一个实现,基于Win32 API构建,Unix/Linux程序很可能不能直接编译运行;
Cygwin是提供类Unix环境(cygwin1.dll),模拟POSIX API接口在Windows上运行,Unix/Linux程序可不修改或少量修改即可编译运行。

5)__CYGWIN__:Cygwin编译器
__CYGWIN32__:32bit版本Cygwin

6)__BORLANDC__:Borland C++编译器

区分不同语言及其版本

1)__cplusplus:区分C与C++代码

gcc编译.c文件,没定义__cplusplus,编译器按C编译代码;
gcc编译.cpp文件,定义了__cplusplus,编译器按C++编译代码;
g++编译.c文件,定义了 __cplusplus,编译器按C++编译代码;
g++编译.cpp文件,定义了 __cplusplus,编译器按C++编译代码;

如果当前文件已定义了__cplusplus(由编译器定义),说明编译环境为C++,则需要用extern "C"{...}包裹C代码,告诉编译器按C编译这部分代码。

tips:MSVC也支持__cplusplus

2)__cplusplus:确定当前支持的C++语言标准的版本
如__cplusplus常用值:199711L = C++98,201103L = C++11,201402L = C++14,201703L = C++17

参考

https://blog.csdn.net/goodcrony/article/details/104985620
https://blog.csdn.net/adminstate/article/details/130247630
https://zhuanlan.zhihu.com/p/78693248

posted @ 2024-02-19 16:30  明明1109  阅读(713)  评论(0编辑  收藏  举报