2015-04-12 29 views
2

我傾倒一些標題的AST是這樣的:鏘AST轉儲不顯示的#define

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

然而,任何#define S於標題上沒有顯示轉儲。有沒有添加它們的方法?

+0

我沒有一個確定的答案,但預處理髮生在解析之前,所以這可能是不可能的。 –

+0

預處理器宏不是AST – Pyetras

+0

的一部分謝謝@AnthonyCalandra和Pyetras。你們中的任何人都可以將其作爲答案發布,因此我可以接受嗎? (除非有人知道我可以使用的解決方法,也許不會預處理輸入或其他東西?) –

回答

2

確實如此,#定義由預處理器處理,而不是編譯器處理。所以你需要一個預處理器解析器階段。我知道有兩種:

  1. Boost Wave可以預處理輸入你的,和/或給你鉤來觸發宏定義或用途。

  2. Clang工具pp-trace使用Clang庫,可以對許多預處理器事件(包括宏定義)執行回調。