gcc/g++ 有没有办法从命令行转储其预处理器定义?我的意思是__GNUC__,__STDC__等。
__GNUC__
__STDC__
是的,使用-E -dM选项而不是 -c。示例(将它们输出到标准输出):
-E -dM
echo | gcc -dM -E - echo | clang -dM -E -
对于 C++
echo | g++ -dM -E -x c++ - echo | clang++ -dM -E -x c++ -
从gcc 手册:
代替正常的输出,为预处理器执行期间定义的所有宏生成一个“#define”指令列表,包括预定义的宏。这为您提供了一种查找预处理器版本中预定义内容的方法。假设你没有文件 foo.h,命令 touch foo.h; cpp -dM foo.h 将显示所有预定义的宏。 如果在没有 -E 选项的情况下使用 -dM,则 -dM 被解释为 -fdump-rtl-mach 的同义词。
代替正常的输出,为预处理器执行期间定义的所有宏生成一个“#define”指令列表,包括预定义的宏。这为您提供了一种查找预处理器版本中预定义内容的方法。假设你没有文件 foo.h,命令
touch foo.h; cpp -dM foo.h
将显示所有预定义的宏。
如果在没有 -E 选项的情况下使用 -dM,则 -dM 被解释为 -fdump-rtl-mach 的同义词。