メインコンテンツ

MISRA C++:2008 Rule 6-6-4

For any iteration statement there shall be no more than one break or goto statement used for loop termination.

説明

ルール定義

For any iteration statement there shall be no more than one break or goto statement used for loop termination. 1

根拠

反復ステートメント内で複数の break または goto ステートメントを使用すると、コードの複雑度が高くなります。適切に構造化されたプログラミングにするには、単一の break または goto ステートメントを使用してください。

Polyspace 実装

Polyspace® は、単一のループ内に複数の break ステートメントまたは goto ステートメント、あるいはこれらのステートメントの組み合わせが存在する場合にこの欠陥を報告します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include<iostream>
void foo(int x, int y)
{
	for (x = 0; x <= y; x++)
	{
		if (x == y)
		{
			// do this
			break;		//Compliant
		}
		else if (x > y)
		{
			goto error;	  //Noncompliant
		}
		else
		{
			//do this
		}
	}

error:
	std::cout << "Error message" << std::endl;
}

if ステートメントには break および goto ステートメントが含まれるため、Polyspace は非準拠としてこのステートメントにフラグを設定します。このシナリオでは、Polyspace が最初の break または goto ステートメントに準拠としてラベルを付けます。Polyspace は、後続のすべての break または goto ステートメントに非準拠としてフラグを設定します。

チェック情報

グループ: Statements
カテゴリ: 必要

バージョン履歴

R2013b で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.