使用Visual Studio(或尝试兼容的编译器)在Windows下编译C / C ++程序时,可以使用预定义的宏_WIN32(来源:http://msdn.microsoft.com/en-us/library/b0084kay.aspx)来进行特定于平台的#ifdef -s
我正在寻找的是一个Linux下的模拟器:一个宏告诉我,我正在为Linux /一个声称与(或多或少)POSIX兼容的操作系统进行编译。
所以我查看了gcc文档,发现了这个:http://gcc.gnu.org/onlinedocs/cpp/System_002dspecific-Predefined-Macros.html
应用于我的程序,以下宏(gcc 4.4.5 - Ubuntu 10.10)看起来很有前途(我希望我没有删除一个重要的宏):
#define __USE_BSD 1
#define __unix__ 1
#define __linux 1
#define __unix 1
#define __linux__ 1
#define _POSIX_SOURCE 1
#define __STDC_HOSTED__ 1
#define __STDC_IEC_559__ 1
#define __gnu_linux__ 1
#define __USE_SVID 1
#define __USE_XOPEN2K 1
#define __USE_POSIX199506 1
#define _G_USING_THUNKS 1
#define __USE_XOPEN2K8 1
#define _BSD_SOURCE 1
#define unix 1
#define linux 1
#define __USE_POSIX 1
#define __USE_POSIX199309 1
#define __SSP__ 1
#define _SVID_SOURCE 1
#define _G_HAVE_SYS_CDEFS 1
#define __USE_POSIX_IMPLICITLY 1
我在哪里可以找到它们的详细文档 - 关于上面提到的Windows特定的宏?
此外,我对通常为其他POSIX兼容操作系统定义的宏感兴趣,如* BSD等。
答案 0 :(得分:7)
glibc manual列出了其中一些宏,包括_POSIX_SOURCE
。但是,它们的工作方式与您的预期不同:程序员定义这些宏(可能在构建脚本中),C库头检查它以启用或禁用某些功能。
答案 1 :(得分:4)
我曾经收集过pkgsrc使用的识别宏,这是一个跨平台的软件包系统:http://www.netbsd.org/docs/pkgsrc/fixes.html#fixes.build.cpp
当时我没有找到任何权威来源。
答案 2 :(得分:3)
如今,镇上有两款游戏:Windows和POSIX。因此,您很可能能够通过#ifndef _WIN32
得到您想要的内容。幸存的Unix变体之间的区别最好使用autoconf样式的特征测试,例如, #ifdef HAVE_SYS_WHATEVER_H
;但除非你知道自己需要,否则不要打扰任何人。现在,autoconf手册中的许多库存测试都是不必要的。
(VMS以及IBM现在称其非Unixy大型机操作系统的任何东西可能仍然算作城里的更多游戏,但我不打算尝试将其移植到其中任何一个,直到有人要求它。)