我使用了一段时间的 clang-tidy 并创建了一些自己的检查。但现在我陷入了这个问题。我有一个 cstyle 转换表达式,我想从中获取一个宏名称作为字符串。
#define H_KEY 5;
float *a;
a = (float *)H_KEY; // I want to print out "H_KEY" from this expression
所以我注册了一个这样的匹配器
void PointersCastCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(cStyleCastExpr().bind("cStyleCastExpr"), this);
}
我能够像这样捕获每个 cstyle 演员并从中获得 subExpr 。
const Expr * subExpr = cStyleCast->getSubExpr();
因此,clang tidy 现在给我的信息是我有“int”类型的子表达式,这是正确的,但我不知道如何获得它的名称。
我尝试的是动态转换为DeclRefExpr,但这没有通过。还尝试了动态强制转换为BuiltinType,然后我想获得一个声明但没有运气。
所以请帮忙。我认为这应该不难。
谢谢!