【问题标题】:Clang AST dump doesn't show #definesClang AST 转储不显示#defines
【发布时间】:2015-04-12 23:20:20
【问题描述】:

我正在转储一些这样的标头的 AST:

clang -cc1 -ast-dump -fblocks header.h

但是,标头上的任何#defines 都不会显示在转储中。有没有办法添加它们?

【问题讨论】:

  • 我没有明确的答案,但是在解析之前会进行预处理,所以这可能是不可能的。
  • 预处理器宏不是 AST 的一部分
  • 谢谢@AnthonyCalandra 和 Pyetras。你们中的任何人都可以将其发布为答案,以便我接受吗? (除非有人知道我可以使用的解决方法,否则可能不预处理输入或其他什么?)

标签: clang llvm abstract-syntax-tree llvm-clang


【解决方案1】:

确实,#defines 由预处理器处理,而不是编译器。所以你需要一个预处理器解析器阶段。我知道两个:

  1. Boost Wave 可以为您预处理输入,和/或为您提供挂钩以触发宏定义或使用。

  2. Clang 工具 pp-trace 使用 Clang 库,可以对许多预处理器事件(包括宏定义)进行回调。

【讨论】:

    猜你喜欢
    • 2019-02-23
    • 2017-01-16
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多