一个关于预编译的问题

环境: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还不了解,只会一些最基本的命令,无法获取到许多有效信息,系统学习和实践都不够!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值