锵AST转储不显示的#define

问题描述:

我倾倒一些标题的AST是这样的:锵AST转储不显示的#define

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

然而,任何#define S于标题上没有显示转储。有没有添加它们的方法?

+0

我没有一个确定的答案,但预处理发生在解析之前,所以这可能是不可能的。 –

+0

预处理器宏不是AST – Pyetras

+0

的一部分谢谢@AnthonyCalandra和Pyetras。你们中的任何人都可以将其作为答案发布,因此我可以接受吗? (除非有人知道我可以使用的解决方法,也许不会预处理输入或其他东西?) –

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

  1. Boost Wave可以预处理输入你的,和/或给你钩来触发宏定义或用途。

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