1

我正在为 clang-tidy 编写一个检查器,它检查 int 和指针之间的转换。

例如,对于代码:

int val = 0xbaddeef;
char* ptr = (char*)val; 

我想将其修复为:

char* ptr = (char*)(uintptr_t)val;

但如果a已经是uintptr_t,我不修复它。

typedef uintptr_t myType;
myType val = 0xbaddeef;
char* ptr = (char*)val; 

我的问题是我匹配了CStyleCastExpr并获得了匹配结果,但是我无法获得演员表的源类型,我使用了CStyleCastExpr.getSubExpr().getType().getXXXXType(),我得到了valis myTypeor的类型long/int,但不是uintptr_t

我怎么知道val是一种类型uintptr_t

4

1 回答 1

0

您可能会查看 getType().getAsString()、getType().getCanonicalType.getAsString() 和 getType().getUnqualifiedType.getAsString()。我认为其中一个会返回你想要的。

于 2019-03-28T18:45:35.003 回答