在C代码编译期间,我能否查看已定义的宏?

10

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

1个回答

14
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)。


非常感谢您提到了“-x c++”。在我在另一个评论线程中发现它之前,我无法弄清楚为什么“echo | g++ -dM -E -”的输出不包括“__cplusplus”。这个命令解决了我的问题。 - AJM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接