从预定义宏区分编译环境

从预定义宏区分编译环境

除了C语言标准定义的特性和提供的供库,
区分编译器,就能确定能使用哪些编译器的扩展特性;
区分目标操作系统,就能确定哪些OS的API是可能用的;

C标准没有定义用来识别操作系统的宏,只能检测各个编译器自带的宏定义
要做跨平台编译,gcc跨Linux/Windows/Mac平台,所以这里只说gcc编译器下怎么区分操作系统

  • 可以用以下命令行获取GCC定义的预编译宏:
$ < /dev/null gcc - -march=i386 -dM -E  < /dev/null | sort  (i386可替换为arm64等)
$ gcc -c -Q --help=target | grep -A2 -E 'valid.*march='  # 查看-march=后可用的参数
Windows和Linux/Cygwin/MSYS2的宏(gcc编译器下)
目标平台
windows _WIN32, _WIN64
Linux __linux__
MSYS2 __MSYS__
Cygwin __CYGWIN__

PS: _WIN32和 _Win64 在gcc和msvc中都可以用来区分windows;但 __WIN32 等只在 gcc中有效。

样板代码

区分操作系统

#ifdef _WIN32
   //define something for Windows (32-bit and 64-bit, this part is common)
   #
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值