我有一段代码,在x86 gcc 4.4.1编译时没有问题,但在黑脉冲gcc 4.1.2编译时失败,并出现许多“numeric constant之前预期的未限定id”错误。我发现有一些变量名与一些预定义宏发生冲突。有没有可能查看cpp文件特定行上定义的宏?
我有一段代码,在x86 gcc 4.4.1编译时没有问题,但在黑脉冲gcc 4.1.2编译时失败,并出现许多“numeric constant之前预期的未限定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)。