介绍
由于业务的需要,经常在不同的操作系统平台编写代码,各个系统平台(编译器)下的接口总有差异,越往底层走差异越大,比如摄像头,在Windows下它可以是一个通用的camera,但是在Linux下你得写V4L2视频采集的驱动。怎么办,你只能用一些条件编译的方法把不同操作系统的个性化
处理隔离开,这就需要使用跨平台的宏定义了
编译器相关
__aarch64__ :特指aarch64编译器,如RK3588、XILINX ZU3EG平台
__linux__ :Linux操作系统,arm或者x64均适用
_WIN64:编写x64应用时的宏定义,表示是64位的MSVC编译器
_WIN32:编写x32应用时的宏定义,表示是32位的MSVC编译器
WIN32:这个是Windows平台的gcc内置的宏定义
QT相关
Q_OS_WIN:表示当前系统为Windows
Q_OS_WIN32:表示当前开发程序为win32应用
Q_OS_WIN64:表示当前开发程序为win64应用
Q_OS_WINDOWS:表示当前系统为Windows
Q_OS_LINUX:表示当前系统为Linux,这个宏好像没有什么用,识别不了Ubuntu20.04系统
Q_OS_MAC:表示当前系统为mac
Q_OS_FREEBSD:表示当前系统为FreeBSD
Q_OS_ANDROID:表示当前系统为Android
参考
gcc查看编译器内置宏定义:gcc -dM -E - </dev/null