the*_*ine 93

下次要检查平台上GCC支持的预定义宏时,请运行带有标志的预处理器-dM.它将列出系统上可用的所有预定义宏.例如:

$ touch dummy.hxx
$ cpp -dM ./dummy.hxx
#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __FLT_EVAL_METHOD__ 0
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __SHRT_MAX__ 32767
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
#define __UINTMAX_TYPE__ long unsigned int
#define __linux 1
#define __unix 1
#define __linux__ 1
...
Run Code Online (Sandbox Code Playgroud)

  • cpp -dM/dev/null也可以,不需要额外的文件. (44认同)
  • 对于OS X上的GCC,可以使用`echo | g ++ -dM -E -` (7认同)
  • 请注意,C和C++有不同的定义; 我必须在cpp命令中添加`-x c ++`以获取用于C++的值. (5认同)

小智 12

我更倾向于测试功能可用性而不是平台名称.尝试使用autoconf.

否则,这是一个全面的平台定义列表.

请查看此页面,了解有关编译器,库,体系结构和设备的定义.


Don*_*ows 9

__APPLE__如果必须,使用宏检测OSX .configure如果可以的话,最好用它来检测功能,但并非一切都运行良好.

  • 我发现使用编译器定义的宏如`__APPLE__`非常有用,因为你可以在很多时候将代码与构建系统分离.然后,当移植到像Android或Chrome NaCl这样的深奥平台时,它会变得更容易,这些平台不一定与`./configure`和朋友一起玩得很好 (2认同)