我有一段代码,在 x86 gcc 4.4.1 上编译没有问题,但在 blackfin gcc 4.1.2 上编译失败,出现许多“数字常量之前的预期不合格 ID”错误。我看到有一些变量名与一些预定义的宏冲突。是否可以在cpp文件的某一行看到定义的宏?
最佳答案
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)。
关于我可以在编译 C 代码期间看到定义的宏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295479/