识别不同操作系统的预定义宏
##1. 判断平台的宏
编写跨平台的程序,难免要根据不现的操作系统编写不同的代码,最常用的手段就是通过预处理命令#ifdef, #ifndef, #elif, #else, #endif
来做,
最常见的就是linux平台和windows平台的程序,一般如下
#ifdef _WIN32
//fow windows
#elif __linux__
//for linux
#endif
区分windows和linux的宏有:
- Windows: WIN32, _WIN32
- Linux: linux, unix, linux, unix, __linux, __unux
windows平台为什么用WIN32来判别,还记得创建“Win32控制台应用程序”么?
“Win32 应用”是传统术语,指使用消息循环而非 Microsoft 基础类 (MFC)、活动模板库 (ATL) 或 .NET Framework 等框架直接处理 Windows 消息的应用。 **虽然此术语为“Win32”,但它可指 32 位或 64 位应用。 **
操作系统宏大全参见predef
OS | MACRO |
---|---|
linux | linux, __linux, __linux__ |
windows | _WIN32 |
MacOS | macintosh |
Android | __ANDROID__ |
gnu linux | __gnu_linux__ |
solaris | sun, __sun |
FreeBSD | __FreeBSD__ |
OpenBSD | __OpenBSD__ |
##2. ubuntu 12.04 predefined macros
ubuntu 12.04下查看gcc编译器的预定义宏
onestraw@ubuntu:~/code/macro$ gcc -dM -E -x c /dev/null |grep -i "unix"
#define __unix__ 1
#define __unix 1
#define unix 1
onestraw@ubuntu:~/code/macro$ gcc -dM -E -x c /dev/null |grep -i "linux"
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1
onestraw@ubuntu:~/code/macro$
命令gcc
可以替换成g++
,cpp
##3. 参考资料
留下评论