-consider-switch-as-single-decision
假设一个开关语句是一个单一的决策点,计算其圈复杂度。
语法
-consider-switch-as-single-decision
描述
示例
圈复杂度值的变化
在此示例中,函数 factorial() 使用 switch-case 语句选择返回值。
int factorial(int in) {
int val = -1;
switch(in) {
case 1:
val = 1;
break;
case 2:
val = 2;
break;
case 3:
val = 6;
break;
default:
break;
}
return val;
}圈复杂度值为 4。当您指定此选项时,Polyspace 会将整个 switch-case 语句视为一个决策点,因此圈复杂度为 2。规范变更
在此示例中,factorial() 的圈复杂度为 8,超过了指定阈值 5,因此违反了规范圈复杂度超出阈值。
int factorial(int in) { //Noncompliant
int val = -1;
switch(in) {
case 1:
val = 1;
break;
case 2:
val = 2;
break;
case 3:
val = 6;
break;
case 4:
val = 24;
break;
case 5:
val = 120;
break;
case 6:
val = 720;
break;
case 7:
val = 5040;
break;
default:
break;
}
return val;
}当指定选项 -consider-switch-as-single-decision 时,圈复杂度变为 2,不再违反规范圈复杂度超出阈值。