赞
踩
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033
目录
C/C++跨平台程序基础知识
前言
1.主流操作系统类别
1.1 UNIX System V
1.2 BSD UNIX-386BSD
1.3 UNIX-Like
1.4 Windows
1.4.1 For DOS
1.4.2 Win 9x
1.4.3 NT系列
1.4.3.1 早期版本
1.4.3.2 客户端
1.4.3.3 服务器
1.4.3.4 特别版本
1.4.4嵌入式系统
1.5 DOS
2.主流操作系统简介
2.1 Windows
2.2 Linux kernel(Linux内核)
2.2.1 GNU/Linux
2.2.2 Android
2.3 APPLE系列
2.4 FreeBSD
2.5 Solaris
3.主流编译器
3.1 Microsoft Visual C++
3.2 GCC C/C++
3.3 Cygwin
3.4 MinGW 和 MinGW-w64
3.5 Oracle Solaris Studio
4.主流架构
4.1 Intel x86
4.2 Intel Itanium (IA-64)
4.3 ARM
4.4 ARM64
5.QT跨平台头文件
前言
很多时候,我们写的程序可能要在多个操作系统运行,这个时候就要求我们的程序尽可能的可以在不改动的情况下完成这个功能。这就是本文要讲的内容。
1.主流操作系统类别
1.1 UNIX System V
▪ A/UX ▪ AIX ▪ HP-UX ▪ IRIX ▪ LynxOS ▪ SCO OpenServer ▪ Tru64 ▪ Xenix ▪ Solaris ▪ OS/2
1.2 BSD UNIX-386BSD
▪ BSD/OS ▪ FreeBSD ▪ NetBSD ▪ NEXTSTEP ▪ Mac OS X ▪ iOS ▪ OpenBSD ▪ SUN OS▪ OpenSolaris
1.3 UNIX-Like
▪ GNU ▪ Linux ▪ Android ▪ Debian ▪ Ubuntu ▪ Red Hat ▪ Linux Mint ▪ Minix ▪ QNX ▪ GNU/Linux ▪ GNU/Hurd ▪ Debian GNU/Hurd ▪ GNU/kFreeBSD ▪ StartOS
1.4 Windows
Microsoft Windows是美国微软公司研发的一套操作系统
1.4.1 For DOS
▪ Windows 1.0 ( 1985) ▪ Windows 2.0 ( 1987) ▪ Windows 2.1 ( 1988)
▪ windows 3.0 ( 1990) ▪ windows 3.1 ( 1992) ▪ Windows 3.2 ( 1994)
1.4.2 Win 9x
▪ Windows 95 ( 1995) ▪ Windows97 ( 1996) ▪ Windows 98 ( 1998)
▪ Windows 98 SE ( 1999) ▪ Windows Me ( 2000)
1.4.3 NT系列
1.4.3.1 早期版本
▪ Windows NT 3.1 ( 1993) ▪ Windows NT 3.5 ( 1994) ▪ Windows NT 3.51 ( 1995)
▪ Windows NT 4.0 ( 1996) ▪ Windows 2000 ( 2000)
1.4.3.2 客户端
▪ windows xp ( 2001) ▪ Windows Vista ( 2005) ▪ Windows 7 ( 2009)
▪ Windows Thin PC ( 2011) ▪ Windows 8 ( 2012) ▪ Windows RT ( 2012)
▪ Windows 8.1 ( 2013)
1.4.3.3 服务器
▪ Windows Server 2003 ( 2003) ▪ Windows Server 2008 ( 2008)
▪ Windows Home Server ( 2008) ▪ Windows HPC Server 2008 ( 2010)
▪ Windows Small Business Server ( 2011) ▪ Windows Essential Business Server
▪ Windows Server 2012 ( 2012) ▪ Windows Server 2012 R2 ( 2013)
1.4.3.4 特别版本
▪ Windows PE ▪ Windows Azure
▪ Windows Fundamentals for Legacy PCs
1.4.4嵌入式系统
▪ Windows CE ▪ Windows Mobile ( 2000) ▪ Windows Phone ( 2010)
1.5 DOS
dos,是磁盘操作系统的缩写,是个人计算机上的一类操作系统。
2.主流操作系统简介
2.1 Windows
Microsoft Windows系统是我们最常用的系统。
宏 说明
_WIN16 16位环境
_WIN32 32和64位环境
_WIN64 64位环境
2.2 Linux kernel(Linux内核)
基于Linux内核的系统定义了这些宏。 有两种主要的基于Linux的操作系统:GNU/Linux和Android
宏 说明
__linux__
linux 已过时(不符合POSIX标准)
__linux 已过时(不符合POSIX标准)
2.2.1 GNU/Linux
宏 说明
__gnu_linux__
2.2.2 Android
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
宏 说明
__ANDROID__
注意:Android系统基于Linux系统,并且Linux宏也是为Android定义的
Notice that Android is based on Linux, and that the Linux macros also are defined for Android.
2.3 APPLE系列
Darwin System(达尔文操作系统) 是一个由苹果公司(Apple Inc.)开发的 UNIX 操作系统。自2000年后,Darwin 是苹果所有操作系统的基础,包括 macOS(原名 Mac OS X ,后缩写为 OS X,至 WWDC 2016 改名为 macOS)、iOS、watchOS 和 tvOS。
宏 说明
__APPLE__ && __MACH__ Mac OS X 由GNU C和Intel C ++定义
2.4 FreeBSD
宏 说明
__FreeBSD__
__FreeBSD_kernel__ 从FreeBSD 8.3, 9.1, 10.0.1开始
2.5 Solaris
宏 说明
sun
__sun
3.主流编译器
3.1 Microsoft Visual C++
MSVC是微软Windows平台Visual Studio自带的C/C++编译器。
宏 说明
_MSC_VER
Visual C++ _MSC_VER
1.0 800
3.0 900
4.0 1000
4.2 1020
5.0 1100
6.0 1200
6.0 SP6 1200
7.0 1300
7.1 (2003) 1310
8.0 (2005) 1400
9.0 (2008) 1500
9.0 SP1 1500
10.0 (2010) 1600
10.0 (2010) SP1 1600
11.0 (2012) 1700
12.0 (2013) 1800
14.0 (2015) 1900
14.0 (2015 Update 1) 1900
14.0 (2015 Update 2) 1900
14.0 (2015 Update 3) 1900
15.0 (2017) 1910
3.2 GCC C/C++
GCC原名GNU C Compiler,后来逐渐支持更多的语言编译(C++、Fortran、Pascal、Objective-C、Java、Ada、Go等),所以变成了GNU Compiler Collection(GNU编译器套装),是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布,是大多数类Unix(如Linux、BSD、Mac OS X等)的标准编译器,而且适用于Windows(借助其他移植项目实现的,比如MingW、Cygwin等)。GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。
宏 说明
__GNUC__
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
These macros are 由all GNU compilers that use the C preprocessor: C, C++, Objective-C
and Fortran. Their values are the major version, minor version, and patch level of the compiler,
as integer constants. For example, GCC 3.2.1 will define __GNUC__ to 3, __GNUC_MINOR__ to 2, and
__GNUC_PATCHLEVEL__ to 1. These macros are also defined if you invoke the preprocessor directly.
这些宏由所有使用C预处理器的GNU编译器定义:C,C ++,Objective-C和Fortran。
它们的值是编译器的主版本,次版本和补丁级别,作为整数常量。 例如,GCC 3.2.1将把__GNUC__定义为3,
__GNUC_MINOR__定义为2,__GNUC_PATCHLEVEL__定义为1.如果直接调用预处理器,也定义了这些宏。
3.3 Cygwin
Cygwin是一个Windows下Unix-like模拟环境,具体说就是Unix-like接口(OS API,命令行)重定向层,其目的是不修改软件源码仅重新编译就可以将Unix-like系统上的软件移植到Windows上(这个移植也许还算不上严格意义上的无缝移植)。始于1995年,最初作为Cygnus软件公司工程师Steve Chamberlain的一个项目。
宏 说明
__CYGWIN__
3.4 MinGW 和 MinGW-w64
MingW(Minimalist GNU on Windows)是一个Linux/Windows下的可以把软件源码中Unix-like OS API调用通过头文件翻译替换成相应的Windows API调用的编译环境,其目的和Cygwin相同。从而把Linux上的软件在不修改源码的情况下编译为可直接在Win下执行的exe。
宏 说明
__MINGW32__ MinGW32、 MinGW-w64 32位、MinGW-w64 64位
__MINGW64__ MinGW-w64 64位
3.5 Oracle Solaris Studio
宏 说明
__SUNPRO_C C编译器
__SUNPRO_CC C++编译器
4.主流架构
4.1 Intel x86
宏 说明
i386 __i386 __i386__ 由GNU C 定义
__i386 Sun Studio定义
__i386 __IA32__ Stratus VOS C 定义
_M_I86 仅针对16位体系结构定义由Visual Studio,Digital Mars和Watcom C / C ++定义
_M_IX86 仅针对32位体系结构定义,由Visual Studio,Intel C / C ++,Digital Mars和Watcom C / C ++定义
__X86__ Watcom C/C++ 定义
_X86_ MinGW32 定义
__THW_INTEL__ XL C/C++ 定义
__I86__ Digital Mars 定义
__INTEL__ CodeWarrior 定义
__386 Diab 定义
4.2 Intel Itanium (IA-64)
宏 说明
__ia64__ __IA64 __IA64__ 由GNU C定义
__ia64 由HP aCC 定义
_M_IA64 由Visual Studio 定义
_M_IA64 由Intel C/C++ 定义
__itanium__ 由Intel C/C++ 定义
4.3 ARM
宏 说明
__arm__ 由GNU C 和 RealView 定义
__thumb__ 由GNU C 和RealView在Thumb模式下定义
__TARGET_ARCH_ARM __TARGET_ARCH_THUMB 由RealView 定义
_ARM 由ImageCraft C 定义
_M_ARM 由Visual Studio 定义
_M_ARMT 由Visual Studio in Thumb mode 定义
4.4 ARM64
宏 说明
__aarch64__ 由GNU C定义
5.QT跨平台头文件
QT5.11
qsystemdetection.h
#ifndef QGLOBAL_H
# include <QtCore/qglobal.h>
#endif
#ifndef QSYSTEMDETECTION_H
#define QSYSTEMDETECTION_H
/*
The operating system, must be one of: (Q_OS_x)
DARWIN - Any Darwin system (macOS, iOS, watchOS, tvOS)
MACOS - macOS
IOS - iOS
WATCHOS - watchOS
TVOS - tvOS
WIN32 - Win32 (Windows 2000/XP/Vista/7 and Windows Server 2003/2008)
WINRT - WinRT (Windows Runtime)
CYGWIN - Cygwin
SOLARIS - Sun Solaris
HPUX - HP-UX
LINUX - Linux [has variants]
FREEBSD - FreeBSD [has variants]
NETBSD - NetBSD
OPENBSD - OpenBSD
INTERIX - Interix
AIX - AIX
HURD - GNU Hurd
QNX - QNX [has variants]
QNX6 - QNX RTP 6.1
LYNX - LynxOS
BSD4 - Any BSD 4.4 system
UNIX - Any UNIX BSD/SYSV system
ANDROID - Android platform
HAIKU - Haiku
The following operating systems have variants:
LINUX - both Q_OS_LINUX and Q_OS_ANDROID are defined when building for Android
- only Q_OS_LINUX is defined if building for other Linux systems
FREEBSD - Q_OS_FREEBSD is defined only when building for FreeBSD with a BSD userland
- Q_OS_FREEBSD_KERNEL is always defined on FreeBSD, even if the userland is from GNU
*/
#if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))
# include <TargetConditionals.h>
# if defined(TARGET_OS_MAC) && TARGET_OS_MAC
# define Q_OS_DARWIN
# define Q_OS_BSD4
# ifdef __LP64__
# define Q_OS_DARWIN64
# else
# define Q_OS_DARWIN32
# endif
# if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
# define QT_PLATFORM_UIKIT
# if defined(TARGET_OS_WATCH) && TARGET_OS_WATCH
# define Q_OS_WATCHOS
# elif defined(TARGET_OS_TV) && TARGET_OS_TV
# define Q_OS_TVOS
# else
# // TARGET_OS_IOS is only available in newer SDKs,
# // so assume any other iOS-based platform is iOS for now
# define Q_OS_IOS
# endif
# else
# // TARGET_OS_OSX is only available in newer SDKs,
# // so assume any non iOS-based platform is macOS for now
# define Q_OS_MACOS
# endif
# else
# error "Qt has not been ported to this Apple platform - see http://www.qt.io/developers"
# endif
#elif defined(__ANDROID__) || defined(ANDROID)
# define Q_OS_ANDROID
# define Q_OS_LINUX
#elif defined(__CYGWIN__)
# define Q_OS_CYGWIN
#elif !defined(SAG_COM) && (!defined(WINAPI_FAMILY) || WINAPI_FAMILY==WINAPI_FAMILY_DESKTOP_APP) && (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))
# define Q_OS_WIN32
# define Q_OS_WIN64
#elif !defined(SAG_COM) && (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__))
# if defined(WINAPI_FAMILY)
# ifndef WINAPI_FAMILY_PC_APP
# define WINAPI_FAMILY_PC_APP WINAPI_FAMILY_APP
# endif
# if defined(WINAPI_FAMILY_PHONE_APP) && WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP
# define Q_OS_WINRT
# elif WINAPI_FAMILY==WINAPI_FAMILY_PC_APP
# define Q_OS_WINRT
# else
# define Q_OS_WIN32
# endif
# else
# define Q_OS_WIN32
# endif
#elif defined(__sun) || defined(sun)
# define Q_OS_SOLARIS
#elif defined(hpux) || defined(__hpux)
# define Q_OS_HPUX
#elif defined(__native_client__)
# define Q_OS_NACL
#elif defined(__linux__) || defined(__linux)
# define Q_OS_LINUX
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
# ifndef __FreeBSD_kernel__
# define Q_OS_FREEBSD
# endif
# define Q_OS_FREEBSD_KERNEL
# define Q_OS_BSD4
#elif defined(__NetBSD__)
# define Q_OS_NETBSD
# define Q_OS_BSD4
#elif defined(__OpenBSD__)
# define Q_OS_OPENBSD
# define Q_OS_BSD4
#elif defined(__INTERIX)
# define Q_OS_INTERIX
# define Q_OS_BSD4
#elif defined(_AIX)
# define Q_OS_AIX
#elif defined(__Lynx__)
# define Q_OS_LYNX
#elif defined(__GNU__)
# define Q_OS_HURD
#elif defined(__QNXNTO__)
# define Q_OS_QNX
#elif defined(__INTEGRITY)
# define Q_OS_INTEGRITY
#elif defined(VXWORKS) /* there is no "real" VxWorks define - this has to be set in the mkspec! */
# define Q_OS_VXWORKS
#elif defined(__HAIKU__)
# define Q_OS_HAIKU
#elif defined(__MAKEDEPEND__)
#else
# error "Qt has not been ported to this OS - see http://www.qt-project.org/"
#endif
#if defined(Q_OS_WIN32) || defined(Q_OS_WIN64) || defined(Q_OS_WINRT)
# define Q_OS_WIN
#endif
#if defined(Q_OS_WIN)
# undef Q_OS_UNIX
#elif !defined(Q_OS_UNIX)
# define Q_OS_UNIX
#endif
// Compatibility synonyms
#ifdef Q_OS_DARWIN
#define Q_OS_MAC
#endif
#ifdef Q_OS_DARWIN32
#define Q_OS_MAC32
#endif
#ifdef Q_OS_DARWIN64
#define Q_OS_MAC64
#endif
#ifdef Q_OS_MACOS
#define Q_OS_MACX
#define Q_OS_OSX
#endif
#ifdef Q_OS_DARWIN
# include <Availability.h>
# include <AvailabilityMacros.h>
#
# ifdef Q_OS_MACOS
# if !defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_6
# undef __MAC_OS_X_VERSION_MIN_REQUIRED
# define __MAC_OS_X_VERSION_MIN_REQUIRED __MAC_10_6
# endif
# if !defined(MAC_OS_X_VERSION_MIN_REQUIRED) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6
# undef MAC_OS_X_VERSION_MIN_REQUIRED
# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_6
# endif
# endif
#
# // Numerical checks are preferred to named checks, but to be safe
# // we define the missing version names in case Qt uses them.
#
# if !defined(__MAC_10_11)
# define __MAC_10_11 101100
# endif
# if !defined(__MAC_10_12)
# define __MAC_10_12 101200
# endif
# if !defined(__MAC_10_13)
# define __MAC_10_13 101300
# endif
# if !defined(__MAC_10_14)
# define __MAC_10_14 101400
# endif
# if !defined(MAC_OS_X_VERSION_10_11)
# define MAC_OS_X_VERSION_10_11 101100
# endif
# if !defined(MAC_OS_X_VERSION_10_12)
# define MAC_OS_X_VERSION_10_12 101200
# endif
# if !defined(MAC_OS_X_VERSION_10_13)
# define MAC_OS_X_VERSION_10_13 101300
# endif
# if !defined(MAC_OS_X_VERSION_10_14)
# define MAC_OS_X_VERSION_10_14 101400
# endif
#
# if !defined(__IPHONE_10_0)
# define __IPHONE_10_0 100000
# endif
# if !defined(__IPHONE_10_1)
# define __IPHONE_10_1 100100
# endif
# if !defined(__IPHONE_10_2)
# define __IPHONE_10_2 100200
# endif
# if !defined(__IPHONE_10_3)
# define __IPHONE_10_3 100300
# endif
# if !defined(__IPHONE_11_0)
# define __IPHONE_11_0 110000
# endif
# if !defined(__IPHONE_12_0)
# define __IPHONE_12_0 120000
# endif
#endif
#ifdef __LSB_VERSION__
# if __LSB_VERSION__ < 40
# error "This version of the Linux Standard Base is unsupported"
# endif
#ifndef QT_LINUXBASE
# define QT_LINUXBASE
#endif
#endif
#endif // QSYSTEMDETECTION_H
Refrence:
https://baike.baidu.com/item/linux/27050?fr=aladdin
https://sourceforge.net/p/predef/wiki/Home/
https://sourceforge.net/p/predef/wiki/OperatingSystems/
---------------------
作者:itas109
来源:CSDN
原文:https://blog.csdn.net/itas109/article/details/80800596
版权声明:本文为博主原创文章,转载请附上博文链接!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。