メインコンテンツ

MISRA C:2012 Rule 15.2

The goto statement shall jump to a label declared later in the same function

説明

ルール定義

The goto statement shall jump to a label declared later in the same function 1 .

根拠

制限のない goto ステートメントの使用により、プログラムは構造化されず解読しにくくなります。反復の実装には、前にある goto ステートメントを後ろにあるステートメントと共に使用できます。後ろにある goto ステートメントを制限すると、言語により提供される for または while などの反復ステートメントのみを反復の実装に使用することになります。この制限によりコードの視覚上の複雑さを軽減できます。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

void foo(void) {
    int i = 0, result = 0;

label1:
    for ( i; i < 5; i++ ) {
        if (i > 2) goto label2;   /* Compliant */
    }

label2: {
        result++;
        goto label1;               /* Non-compliant */
    }
}

この例では、goto ステートメントにより label1 までの後方からのジャンプが発生する場合、ルールに違反します。

goto ステートメントにより label2 までの前方へのジャンプが発生する場合、ルールに違反しません。

チェック情報

グループ: 制御フロー
カテゴリ: 必要
AGC カテゴリ: 推奨

バージョン履歴

R2014b で導入


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.