-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,不再违反规范圈复杂度超出阈值
。