在编译C代码期间,我可以看到已定义的宏吗?

时间:2010-02-19 10:16:48

标签: c gcc macros c-preprocessor

我有一段代码可以在没有x86 gcc 4.4.1的情况下编译,但是在blackfin gcc 4.1.2中出现了很多“数字常量之前预期的非限定id”错误。我看到有一些变量名与一些预定义的宏冲突。是否可以在cpp文件的某一行看到已定义的宏?

1 个答案:

答案 0 :(得分:11)

gcc -dM -E myfile.cpp
  • -dM开关告诉GCC转储给定文件中定义的所有宏(它将包含需要由语言标准定义的宏列表以及GCC自定义的任何其他宏)。

  • -E开关告诉GCC在预处理文件后不要继续编译。

为了查看在cpp文件的给定行定义的宏列表,可能更容易首先过滤掉任何预定义的宏(由编译器定义的宏)。在BASH中,您可以这样做:

LINE=40
FILE=myfile.cpp
HEADER=myfile.h
diff <(grep -h '#include[[:space:]]*<.*>' ${FILE} ${HEADER} | gcc -dM -x c++ -E -) <(cat ${FILE} | head -n ${LINE} | gcc -x c++ -dM -E -)

这应该过滤掉标准系统头或框架定义的任何宏。额外的部分-x c++告诉GCC将输入解释为C ++源[需要预处理],这是因为它无法根据文件名的扩展来确定它(源代码是通过stdin交给GCC。