正在跳过IfStatements中的语句

Skipping statements inside an IfStatements

本文关键字:语句 IfStatements      更新时间:2023-10-16

我创建了一个if(isa<IfStmt>(s))if(isa<ReturnStmt>(s)),如果找到它,就会打印一些东西。我创建了这个简单的c++代码,它在if语句中包含return语句

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

是否可以跳过/忽略if-elset语句中的return语句

clang-query test.cpp --

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

为了解决这样的问题,AST匹配器的引用和clang的-ast-dump参数是您的朋友。以及clang-query本身,因为它接受与clang的C++API基本相同的DSL。