Mar*_*c-O 3 c++ qt casting clang
我有一些代码行从静态代码分析器返回错误.
该分析器使用clang编程,违反规则的源代码非常简单:
// For each cast expression in the code
bool VisitCastExpr(CastExpr *castExpr){
string errorMsg;
string CastName = castExpr->getCastKindName();
// If cast is from pointer to everything different than an integer, add violation
if((castExpr->getCastKind() == CK_MemberPointerToBoolean)||(castExpr->getCastKind() == CK_PointerToBoolean)||(castExpr->getCastKind() == CK_CPointerToObjCPointerCast)||(castExpr->getCastKind() == CK_BlockPointerToObjCPointerCast)||(castExpr->getCastKind() == CK_AnyPointerToBlockPointerCast)){
errorMsg = "Forbidden cast "+CastName+" from pointer to non-integer type";
addViolation(castExpr,this,errorMsg);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,它只是在从指针到不同于整数的某些东西进行某些强制转换(隐式或显式)时添加违规.
以下是返回错误的表达式之一:
if(st_parametre_embarque.qs_nom.contains("PAR")){.
st_parametre_embarque只是一个结构,而这个领域qs_nom是一个QString.
方法Qstring :: contains()确实返回一个布尔值.
以下是代码分析器产生的违规消息:
禁止从指针转换为非整数类型的PointerToBoolean
所以我真的没有看到可能存在的地方castExpr,而且从指针到布尔值.
在Qt5之前,QString::contains退回了一个QBool,而不是一个bool.该值必须以某种方式转换为bool,静态分析器已经确定它是隐式转换.尝试与布尔常量(即调用operator==(QBool, bool))进行显式比较,并查看静态分析器是否遵循它.
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |