我可以在编译 C 代码期间看到定义的宏吗?

标签 c gcc macros c-preprocessor

我有一段代码,在 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/

相关文章:

c - 这个 C 函数是不是写得很糟糕?

c - 了解如何从 C 中的另一个源文件调用函数

c++ - 为什么 c++11 上的 std::list 更大?

c 宏,数组定义作为参数

c - win 检查功能在用 c 编写的连接四中无法正常工作;

linux - 来自 gcc 的 pgo 的优化报告

c - GCC 中 -O0 和 -O1 的区别

在 C 中将宏转换为枚举类型

c - 代表微芯片上的引脚的宏

c - 释放内存时触发断点