【问题标题】:Can I see defined macros during compilation of a C code?我可以在编译 C 代码期间看到定义的宏吗?
【发布时间】:2010-02-19 10:16:48
【问题描述】:

我有一段代码在 x86 gcc 4.4.1 上编译时没有问题,但在 blackfin gcc 4.1.2 上编译失败,出现许多“数字常量之前的预期非限定 ID”错误。我看到有一些变量名与一些预定义的宏发生冲突。是否可以在 cpp 文件的某一行看到已定义的宏?

【问题讨论】:

    标签: c gcc macros c-preprocessor


    【解决方案1】:
    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 通过标准输入)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-25
      • 2014-01-16
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多