我正在为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()
,我得到的val
的类型是myType
或long/int
,但没有uintptr_t
。<<<<<<<<。/p>
我怎么知道val
是uintptr_t
的一种?
您可能会查看getType()。getAsstring(),getType()。getCanonicalType.getAsstring()和getType()。getunqualifiedType.getAsstring()。我认为其中一个会返回您想要的东西。