平台C预处理器定义 我正在编写一个C++的小库,我需要能够在很多不同的平台上构建,包括iPhone、Windows、Linux、MAC和Symbian S60。我已经编写了大部分代码,因此它与平台无关,但有些部分必须基于每个平台编写

平台C预处理器定义 我正在编写一个C++的小库,我需要能够在很多不同的平台上构建,包括iPhone、Windows、Linux、MAC和Symbian S60。我已经编写了大部分代码,因此它与平台无关,但有些部分必须基于每个平台编写,c++,c-preprocessor,portability,C++,C Preprocessor,Portability,目前,根据当前平台的不同,我通过包含不同的头来实现这一点,但我很难充实它,因为我不确定为所有平台定义了哪些预处理器定义。对于windows,我通常可以看到WIN32或_WIN32。对于Linux,我可以依靠查看UNIX,但我对其他平台或其64位变体不太确定。是否有任何一个列表在平台上找到不同的定义,或者我必须求助于配置文件还是GCC参数?< P> C和C++标准都不定义这些符号,所以你将任由特定的C或C++实现。有一个常用符号的列表是很有用的,但不幸的是我没有一个。我不认为存在一个通用的平台定义

目前,根据当前平台的不同,我通过包含不同的头来实现这一点,但我很难充实它,因为我不确定为所有平台定义了哪些预处理器定义。对于windows,我通常可以看到WIN32或_WIN32。对于Linux,我可以依靠查看UNIX,但我对其他平台或其64位变体不太确定。是否有任何一个列表在平台上找到不同的定义,或者我必须求助于配置文件还是GCC参数?

< P> C和C++标准都不定义这些符号,所以你将任由特定的C或C++实现。有一个常用符号的列表是很有用的,但不幸的是我没有一个。

我不认为存在一个通用的平台定义列表,因为我所看到的每个跨平台库都有一个特设的config.h,其中满是这些东西。但是你可以考虑看看那些相当便携的图书馆使用的图书,比如LIPPNG,ZLIB等等。
这里是一个由

使用的定义将完全由编译器供应商决定。如果您在所有平台上都使用相同的编译器(比如说,gcc),那么您将更容易使用它


您可能还希望尝试组织项目,使大多数.h文件不依赖于平台。将实现(cpp文件)拆分为单独的文件;一个用于非特定材料,一个用于每个平台。特定于平台的标题可以包括“私有”标题,这些标题仅对该平台有意义。您可能需要使适配器函数100%地工作(当系统lib采用稍微不同的参数时),但我最终发现它非常有用,在未来,引入一个新平台要容易得多。

我的书签中有一个页面。

如果您想查看具有GCC(例如Mac OS X、iOS、Linux)的给定系统的默认预处理器符号,您可以从命令行获得一个完整的列表,因此:

echo 'main(){}' | cpp -dM
然而,这些符号的使用通常是有限的,因为在预处理器运行的编译阶段,大多数符号只标识托管编译器的系统的操作系统和CPU类型,而不是目标系统(例如,在为iOS交叉编译时)。在MacOSX和iOS上,确定目标系统编译时特性的正确方法是

#include <TargetConditionals.h>
#包括

这将从当前使用的平台和SDK中获取TargetConditionals.h,然后您可以从一些宏中确定(例如)endianness和一些其他特征。(查看TargetConditionals.h,看看你能收集到什么样的信息。)

我编辑了你的链接,指向新的wiki化版本,它更为最新,尽管Google总是指向旧版本。尽管检查-dM输出可能会有所帮助,但它不能保证像predef sourceforge wiki页面那样提供更多信息。