识别不同操作系统的预定义宏

少于 1 分钟读完

##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. 参考资料

留下评论