如何使用预处理器指令检查OS?

如何使用预处理器指令检查OS?

我需要我的代码根据编译它的操作系统来做不同的事情。我在找这样的东西:

#ifdef OSisWindows// do Windows-specific stuff#else// do Unix-specific stuff#endif

有办法吗?有更好的方法来做同样的事情吗?


慕码人2483693
浏览 501回答 3
3回答

GCT1015

这个操作系统的预定义宏站点有一个非常完整的检查列表。下面是其中的一些,并提供了找到它们的链接:窗_WIN3232位和64位_WIN6464位Unix(Linux,*BSD,MacOSX)看这个相关问题在使用这张支票的一些缺陷上。unix__unix__unix__MacOSX__APPLE____MACH__两者都已定义;检查两者都应该有效。linux__linux__linux过时(不符合POSIX标准)__linux过时(不符合POSIX标准)FreeBSD__FreeBSD__

泛舟湖上清波郎朗

GCC在Windows上定义:gcc&nbsp;-dM&nbsp;-E&nbsp;-&nbsp;<NUL:在Linux上:gcc&nbsp;-dM&nbsp;-E&nbsp;-&nbsp;</dev/nullMinGW中预定义的宏:WIN32&nbsp;_WIN32&nbsp;__WIN32&nbsp;__WIN32__&nbsp;__MINGW32__&nbsp;WINNT&nbsp;__WINNT&nbsp;__WINNT__&nbsp;_X86_&nbsp;i386&nbsp;__i386关于统一:unix&nbsp;__unix__&nbsp;__unix

智慧大石

基于nadeausofware和朗达仙女的回答.#include&nbsp;<stdio.h>/** &nbsp;*&nbsp;Determination&nbsp;a&nbsp;platform&nbsp;of&nbsp;an&nbsp;operation&nbsp;system &nbsp;*&nbsp;Fully&nbsp;supported&nbsp;supported&nbsp;only&nbsp;GNU&nbsp;GCC/G++,&nbsp;partially&nbsp;on&nbsp;Clang/LLVM &nbsp;*/#if&nbsp;defined(_WIN32) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"windows"&nbsp;//&nbsp;Windows#elif&nbsp;defined(_WIN64) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"windows"&nbsp;//&nbsp;Windows#elif&nbsp;defined(__CYGWIN__)&nbsp;&&&nbsp;!defined(_WIN32) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"windows"&nbsp;//&nbsp;Windows&nbsp;(Cygwin&nbsp;POSIX&nbsp;under&nbsp;Microsoft&nbsp;Window)#elif&nbsp;defined(__ANDROID__) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"android"&nbsp;//&nbsp;Android&nbsp;(implies&nbsp;Linux,&nbsp;so&nbsp;it&nbsp;must&nbsp;come&nbsp;first)#elif&nbsp;defined(__linux__) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"linux"&nbsp;//&nbsp;Debian,&nbsp;Ubuntu,&nbsp;Gentoo,&nbsp;Fedora,&nbsp;openSUSE,&nbsp;RedHat,&nbsp;Centos&nbsp;and&nbsp;other#elif&nbsp;defined(__unix__)&nbsp;||&nbsp;defined(__APPLE__)&nbsp;&&&nbsp;defined(__MACH__) &nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;<sys/param.h> &nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;defined(BSD) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"bsd"&nbsp;//&nbsp;FreeBSD,&nbsp;NetBSD,&nbsp;OpenBSD,&nbsp;DragonFly&nbsp;BSD &nbsp;&nbsp;&nbsp;&nbsp;#endif#elif&nbsp;defined(__hpux) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"hp-ux"&nbsp;//&nbsp;HP-UX#elif&nbsp;defined(_AIX) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"aix"&nbsp;//&nbsp;IBM&nbsp;AIX#elif&nbsp;defined(__APPLE__)&nbsp;&&&nbsp;defined(__MACH__)&nbsp;//&nbsp;Apple&nbsp;OSX&nbsp;and&nbsp;iOS&nbsp;(Darwin) &nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;<TargetConditionals.h> &nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;TARGET_IPHONE_SIMULATOR&nbsp;==&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"ios"&nbsp;//&nbsp;Apple&nbsp;iOS &nbsp;&nbsp;&nbsp;&nbsp;#elif&nbsp;TARGET_OS_IPHONE&nbsp;==&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"ios"&nbsp;//&nbsp;Apple&nbsp;iOS &nbsp;&nbsp;&nbsp;&nbsp;#elif&nbsp;TARGET_OS_MAC&nbsp;==&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"osx"&nbsp;//&nbsp;Apple&nbsp;OSX &nbsp;&nbsp;&nbsp;&nbsp;#endif#elif&nbsp;defined(__sun)&nbsp;&&&nbsp;defined(__SVR4) &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;"solaris"&nbsp;//&nbsp;Oracle&nbsp;Solaris,&nbsp;Open&nbsp;Indiana#else &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PLATFORM_NAME&nbsp;NULL#endif//&nbsp;Return&nbsp;a&nbsp;name&nbsp;of&nbsp;platform,&nbsp;if&nbsp;determined,&nbsp;otherwise&nbsp;-&nbsp;an&nbsp;empty&nbsp;stringchar&nbsp;*get_platform_name()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(PLATFORM_NAME&nbsp;==&nbsp;NULL)&nbsp;?&nbsp;""&nbsp;:&nbsp;PLATFORM_NAME;}int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;puts(get_platform_name()); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}用GCC和Clang测试:Debian 8窗户(MinGW)窗口(Cygwin)
打开App,查看更多内容
随时随地看视频慕课网APP