2016-07-27 65 views
0

我创建了一个if(isa<IfStmt>(s))if(isa<ReturnStmt>(s)),它会打印出一些内容。我创建了包含内部的if语句在IfStatements中跳过语句

#include <stdlib.h> 
int main(int argc, char** argv) { 
    int a = atoi(argv[1]); 
    if(a == 0) 
    return 1; 
    else 
    return 10; 
    return 0; 
} 

是否有可能跳过/忽略return语句内如果else语句 return语句这种简单的C++代码?

+1

你的意思是你想要一个clang ast查询,它只匹配那些不在if块之内的返回语句吗? – Dutow

+0

@dutow是的。请原谅我的英语,因为我不好。 – HiWorld

回答

2

clang-query test.cpp --

match returnStmt(unless(hasAncestor(ifStmt())) 

为了解决这样的问题,AST matcher's reference和铿锵的-ast-dumpparameter是你的朋友。同样也是clang-query本身,因为它接受的大部分是与clang的C++ API相同的DSL。

+0

这工作。谢谢 – HiWorld