【问题标题】:include processed prepocessor directives into `g++ -E' output将处理过的前处理指令包含到“g++ -E”输出中
【发布时间】:2016-02-15 12:14:34
【问题描述】:

我在使用 g++ 编译第 3 方库时遇到了一些预处理故障。

我可以在-E 输出中看到某个用#ifndef SYMBOL 包裹的标头正在被绕过。显然,该符号已在其他地方定义。 但我看不到在哪里,因为在 -E 输出中不存在已处理的指令。

有没有办法将它们包括在内(可能是 cmets)?

【问题讨论】:

    标签: g++ c-preprocessor


    【解决方案1】:

    不,没有将预处理指令作为 cmets 的标准方法。

    但是,您可以使用 g++ -C -E 和行号(以 # 开头的行输出)和 cmets(然后将其复制到预处理的表单中)。

    您也可以使用-H 选项(获取包含的文件)

    【讨论】:

      【解决方案2】:

      我找到的最接近的是-d<chars> 系列选项:

      • -dM 转储所有定义的宏
      • -dD 显示它们的定义位置(转储 #define 指令)
      • -dU 显示它们的使用位置(代替#if(n)def,它输出#define#undef,具体取决于是否定义了宏)

        I 添加到其中任何一个也会转储#include 指令。

      缺点是一次只能使用三个中的一个,它们会抑制正常输出。

      另一个不太容易理解的缺点是 -dD-dU 不包含预定义的宏。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-22
        • 2021-03-19
        • 2015-04-09
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多