Number of return statements exceeds threshold

Количество return операторы в функции больше заданного порога

Описание

Этот дефект возникает на функции, когда количество return оператор в функции больше заданного порога проверки. Для получения дополнительной информации о том, как Polyspace вычисляет количество операторов возврата в функции, см. Number of Return Statements

Polyspace® использует порог по умолчанию 1, если вы не задаете порог. Чтобы задать файл выбора, в котором можно задать порог, используйте Set checkers by file (-checkers-selection-file). Также см. «Уменьшение сложности программного обеспечения при помощи Polyspace Checkers».

Когда вы импортируете комментарии из предыдущих анализов при помощи polyspace-comments-importPolyspace копирует любую рецензирующую информацию о метрике кода Number of Return Statements в предыдущем результате этой проверки в текущем результате. Если текущий результат содержит ту же метрику кода, информация проверки также копируется в метрику кода.

Риск

Наличие нескольких операторов возврата затрудняет определение того, какой объект может быть возвращен функцией. Такая путаница может привести к ошибкам и проблемам с обслуживанием, которые трудно отладить.

Зафиксировать

Чтобы исправить эту проверку, используйте один оператора возврата. Например, сохраните возвращаемое значение в объекте и задайте его условно вместо возврата различных объектов в другом условном операторе возврата.

Примеры

расширить все

int afunc (int x);
int foo2(int x,int y)//Noncompliant 
{
	
	if (x <= 0){
		if (x > 10 ) { return 0; }
	}
	if (x<-240) {
		if (x < -2565) { 
			return (x < -253 ? 0: afunc (x <22566 ? 1: afunc(x < -25103 ? 0: 6))); 
		}
	}
}

В этом примере return оператор foo обусловлена, что приводит к двум return операторы, который превышает порог оператора возврата по умолчанию, равный единице. Polyspace помечает функцию foo как несоответствующий.

Коррекция - Объявить объект для хранения Возврата значения

Одна возможная коррекция состоит в том, чтобы объявить объект, который затем условно определен, чтобы иметь соответствующее возвращаемое значение. Этот объект затем возвращается функцией с помощью одного оператора возврата.

int afunc (int x);
int foo2(int x,int y)//Compliant 
{
	int returnData;
	if (x <= 0){
		if (x > 10 ) { returnData =  0; }
	}
	if (x<-240) {
		if (x < -2565) { 
			returnData =  (x < -253 ? 0: afunc (x <22566 ? 1: afunc(x < -25103 ? 0: 6))); 
		}
	}
	return returnData;
}

Проверяйте информацию

Группа: Комплексность программного обеспечения
Язык: C | C++
Акроним: SC16
Порог по умолчанию: 1
Введенный в R2021a