【发布时间】:2010-02-19 10:16:48
【问题描述】:
我有一段代码在 x86 gcc 4.4.1 上编译时没有问题,但在 blackfin gcc 4.1.2 上编译失败,出现许多“数字常量之前的预期非限定 ID”错误。我看到有一些变量名与一些预定义的宏发生冲突。是否可以在 cpp 文件的某一行看到已定义的宏?
【问题讨论】:
标签: c gcc macros c-preprocessor
我有一段代码在 x86 gcc 4.4.1 上编译时没有问题,但在 blackfin gcc 4.1.2 上编译失败,出现许多“数字常量之前的预期非限定 ID”错误。我看到有一些变量名与一些预定义的宏发生冲突。是否可以在 cpp 文件的某一行看到已定义的宏?
【问题讨论】:
标签: c gcc macros c-preprocessor
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++ 源 [需要预处理],这是因为它无法根据文件名的扩展名来确定它(源代码交给GCC 通过标准输入)。
【讨论】: