exponenta event banner

Число операторов возврата превышает пороговое значение

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

Описание

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

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

При импорте комментариев из предыдущих анализов с помощью polyspace-comments-import, Polyspace копирует любую информацию о проверке в метрике кода 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 как несоответствующее.

Исправление - Объявление объекта для сохранения значения возврата

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

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