我已从一个较大的(C)项目中删除了一段代码。这个代码在许多地方定义了许多宏 - 其中一些只用于原始的,更大的代码库,而不是我剪切的部分代码所使用的。
我想快速确定哪些宏在实际使用中,哪些不在(以便我可以删除那些不是)。我不关心使用它们的代码路径是否被采用(即if (1+1 == 3) { MY_MACRO(a,b,c); }
是一个用途,就我而言。
这样做的好方法是什么?我能想到的最好的方法是使用-E预处理所有内容并查找以某种方式提及宏的源位置注释。
备注:
答案 0 :(得分:3)
存在名为pp-trace的clang
工具。它输出每个预处理器调用及其参数。
您对MacroExpands
事件感兴趣,在pp-trace
输出中看起来如此:
...
- Callback: MacroExpands
MacroNameTok: X_IMPL
MacroDirective: MD_Define
Range: [(nonfile), (nonfile)]
Args: [a <plus> y, b]
...
从MacroNameTok
块中提取MacroExpands
应该可以帮到你。