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

Ati*_*liz 8 c macros gcc c-preprocessor

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

dre*_*lax 12

gcc -dM -E myfile.cpp
Run Code Online (Sandbox Code Playgroud)
  • -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 -)
Run Code Online (Sandbox Code Playgroud)

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