主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

-consider-switch-as-single-decision

假设一个开关语句是一个单一的决策点,计算其圈复杂度。

语法

-consider-switch-as-single-decision

描述

-consider-switch-as-single-decision 更改了 Polyspace® 计算度量圈复杂度和规范圈复杂度超出阈值的方式。圈复杂度是指代码中的决策点数加一。默认情况下,Polyspace 将每个 switch-case 语句的单独实例视为独立的决策点,如果该实例以 break 语句结束。当您指定此选项时,Polyspace 会将整个 switch-case 语句计为一个决策点。

示例

圈复杂度值的变化

在此示例中,函数 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;
}
默认情况下,Polyspace 报告的圈复杂度值为 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,不再违反规范圈复杂度超出阈值

依赖关系

当您计算代码度量或激活规范编码规则时,此选项非常有用。请参阅: