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