使用该选项与在源文件开头包含 #define 指令等效。可以使用多个 -D 选项。
下表显示了预定义的宏。可以在诸如 #ifdef 之类的预处理程序条件下使用这些值。
表 A–2 预定义的宏| 平台 | 宏名称 | 说明 | 
|---|---|---|
| SPARC 和 x86 | 如果启用了“数组”形式的运算符 new 和 delete,则定义 _ _ARRAYNEW。有关更多信息,请参见 -features=[no%]arraynew。 | |
| 适用于 varargs.h、stdarg.h 和 sys/varargs.h 中的 _ _builtin_alloca、_ _builtin_va_alist 和 _ _builtin_va_arg_incr 关键字。 | ||
| 设置为 0(零) | ||
| 其中,uname -s 是 uname –s 的输出,uname -r 是 uname -r 的输出,且无效字符(如句点 (.))替换为下划线,如 -D_ _SunOS_5_9 和 -D_ _SunOS_5_10 所示。 | ||
| 如果启用了类型 bool,则定义 _BOOL。有关更多信息,请参见 -features=[no%]bool。 | ||
| _WCHAR_T | ||
| 请参见交互。 | ||
| SPARC | __SUN_PREFETCH=1 | |
| __SunOS_OSversion _OSversion | ||
| 请参见交互。 | ||
| sun | 请参见交互。 | |
| SPARC v9 | 只限于 64 位编译模式 | |
| x86 | ||
| linux | ||
| _ _amd64 | ||
| _ _gnu_ _linux_ _ | ||
| 请参见交互。 | ||
| _ _ linux | ||
| _ _ linux_ _ | ||
| _ _x86 _ 64 | 
如果不使用 =def,则 name 定义为 1。
如果使用 +p,则不会定义 sun、unix、sparc 和 i386。
–U