メインコンテンツ

return ステートメントの数がしきい値を超えている

関数に含まれる return ステートメントの数が、定義済みしきい値を超えています

R2021a 以降

説明

この欠陥は、チェッカーの定義済みしきい値を超える数の return ステートメントが含まれる関数に対して報告されます。Polyspace が関数内の return ステートメントの数を計算する方法について詳しくは、return ステートメントの数を参照してください。

Polyspace® は、ユーザーがしきい値を指定しない限り、既定のしきい値として 1 を使用します。しきい値を指定できる選択ファイルを指定するには、オプション [ファイルごとにチェッカーを設定] (-checkers-selection-file) または [チェッカー アクティベーション ファイル] (-checkers-activation-file) を使用します。

polyspace-comments-import を使用して以前の解析からコメントをインポートすると、Polyspace は以前の結果のコード メトリクスの return ステートメントの数に関するレビュー情報を、このチェッカーの現在の結果にコピーします。現在の結果に同じコード メトリクスが含まれている場合、レビュー情報はそのコード メトリクスにもコピーされます。

リスク

複数の return ステートメントを使用すると、関数がどのオブジェクトを返すのかを判断しにくくなります。このような混乱により、デバッグするのが難しいバグや保守の問題につながる可能性があります。

修正方法

このチェックを修正するには、単一の return ステートメントを使用します。たとえば、さまざまな条件付きの return ステートメントで異なるオブジェクトを返すのではなく、戻り値を格納する 1 つのオブジェクトを条件付きで定義します。

すべて展開する

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))); 
		}
	}
}

この例では、fooreturn ステートメントは条件付きであり、2 つの return ステートメントに分岐します。これは、return ステートメント数の既定のしきい値 1 を超えています。Polyspace は、非準拠として関数 foo にフラグを設定します。

修正 — 戻り値を格納するオブジェクトを宣言

1 つの修正方法として、1 つのオブジェクトを宣言して、適切な戻り値が格納されるように条件付きで定義します。このオブジェクトは、単一の 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 で導入