不同系统和架构下的宏定义名称

前言

  • C/C++代码实现跨平台编译时,基本上都会调用系统函数,这个时候就可以使用不同系统下的宏定义来实现跨平台的编译。系统主要分为windows,linux和mac。架构主要指的是linux下的架构,常用的有x86,arm和mips架构。

Windows系统宏定义

  • windows平台CPU被IntelAMD二分天下,都是x86架构
  • windows系统的宏定义为 _WIN32

Linux系统宏定义

  • linux系统的宏定义为 __linux__
  • linux系统按照架构又分为 x86架构,arm架构和mips架构
    • x86架构芯片主要是IntelAMD,我们在windows虚拟机上安装的ubuntu和centos等系统,都属于x86架构。国产x86架构的芯片主要是兆芯
    • x86架构64位宏定义为 __x86_64__
    • x86架构32位宏定义为 __i386__
    • arm架构芯片主要有飞腾鲲鹏
    • arm架构宏定义为 __arm__
    • mips架构芯片主要有龙芯
    • mips架构宏定义为 __mips__
  • 编码时,linux系统下一般来说不用区分详细的架构,系统API基本上都是通用了,除非有特殊需求,需要区分架构。

Mac系统宏定义

  • mac系统的宏定义为 __APPLE__
  • mac系统使用的芯片有Intel,M1,M2,但是由于Mac系统对不同芯片做了很好的兼容,所以在编码时,不用关注mac系统的芯片和架构。直接使用 __APPLE__ 即可。

编码实现

  • 可以通过以下宏定义来区分不同平台和架构
  •   #ifdef _WIN32	
      		//windows系统
      #elif __linux__
      		#ifdef __x86_64__
      			//linux系统的x86架构64位
      		#elif __i386__
      			//linux系统的x86架构32位
      		#elif __arm__
      			//linux系统的arm架构	
      		#elif __mips__
      			//linux系统的mips架构
      		#endif
      #elif __APPLE__
      		//苹果系统
      #else
      		//其他系统
      #endif
    
  • 上面使用的宏定义无法使用或语法,因此还有下面这种写法
  •   #if defined _WIN32
      	//windows系统
      #elif defined __linux__
      	#if defined(__x86_64__) || defined(__i386__)
      		//linux系统的x86架构64位或32位
      	#elif defined __arm__
      		//linux系统的arm架构	
      	#elif defined __mips__
      		//linux系统的mips架构
      	#endif
      #elif defined __APPLE__ 
      	//其他系统
      #else
      	//其他系统
      #endif
    
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值