环境:cent OS + gcc4.8
编写代码的时候,使用预编译命令,发现用#if defined(linux)不行,用#if defined(__linux)却是可以的。换成#if defined(unix)不行,#if defined(__unix)也是可以的。
用g++ -E查看预编译的文件,发现使用#if defined(linux)或者#if defined(unix)的时候,没有包含对应的头文件,所以可以判断出是没有定义linux或者unix。
用“g++ -posix -E -dM - </dev/null”在终端跑过,unix,__unix,linux,__linux都是有定义的,所以问题很奇怪。
发帖询问后获悉可能是一些标准对预定义宏的一些限制,并用 "gcc -dM -E"获取到预编译完之后还可以使用的宏定义,发现添加了"-std=c++0x"之后,宏定义linux和unix是不存在的,而移除该标准后,宏定义是存在的。
所以,可以判定是gcc对c++ 11标准的实现上做了修改。
发现自己对gcc还不了解,只会一些最基本的命令,无法获取到许多有效信息,系统学习和实践都不够!