当if仅包含一条语句时,如何使用clangs Rewriter删除IfStmt,这是由预处理器if构造决定的 在编写论文时,我需要用CLAN改写器删除C++文件中的IFSTMT。

当if仅包含一条语句时,如何使用clangs Rewriter删除IfStmt,这是由预处理器if构造决定的 在编写论文时,我需要用CLAN改写器删除C++文件中的IFSTMT。,c++,clang,preprocessor,C++,Clang,Preprocessor,我使用clang及其AST,因为我需要AST来找到正确的位置。对于删除,我使用if构造的getSourceRange方法,然后使用适当的重写器方法删除它 但这样做之后,我在更改的C++文件中得到了语法错误。 if看起来像: if( someCondition ) #if SOMEOTHERCONDITION doSth1(); #else doSth2(); #endif 删除后,预处理器构造的if部分被删除,其余部分保留 有什么常见的方法来处理这样的问题吗?删除if后,源代码应该是什么样子?

我使用clang及其AST,因为我需要AST来找到正确的位置。对于删除,我使用if构造的
getSourceRange
方法,然后使用适当的重写器方法删除它

但这样做之后,我在更改的C++文件中得到了语法错误。

if看起来像:

if( someCondition )
#if SOMEOTHERCONDITION
doSth1();
#else
doSth2();
#endif
删除后,预处理器构造的if部分被删除,其余部分保留


有什么常见的方法来处理这样的问题吗?

删除if后,源代码应该是什么样子?在这种情况下,我想删除完整的预处理器构造以避免上述语法错误。甚至最好只删除第1行,3和5,因为只有依赖于第1行的if构造的语句才会被删除。