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

前言

  • 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
    

猜你喜欢

转载自blog.csdn.net/new9232/article/details/131946792
今日推荐