メインコンテンツ

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

A switch-label shall only be used when the most closely-enclosing compound statement is the body of a switch statement.

説明

ルール定義

A switch-label shall only be used when the most closely-enclosing compound statement is the body of a switch statement. 1

根拠

switch ステートメントの case ラベルまたは default ラベルを異なるスコープに配置すると、構造化されていないコードになる可能性があります。構造化されていないコードは予期せぬ動作につながり、開発者の混乱を招く可能性があります。この問題を防ぐには、すべての case ラベルと default ラベルを、switch ステートメントの本体を形成する複合ステートメントと同じスコープに配置してください。

Polyspace 実装

case ラベルが switch ステートメントの本体とは異なるスコープに属している場合は常に、Polyspace® がこの欠陥を報告します。

トラブルシューティング

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

すべて展開する

#include <cstdint>

int y, sum;

int heresASum(int a, int b)
{
    sum = a + b;
    return sum;
}

int example(int x)
{
    switch (x) {
    case 1:                          //compliant
        if (y > 0) {
        case 2:                      //noncompliant
            y = heresASum(x, y);
            break;
        }
        break;

    case 3:
        break;

    default:
        break;
    }
	
	return x;
}

case ラベル case 2 は、case ラベル case 1 内に入れ子にされているため、他の case ラベル ステートメントおよび default ラベル ステートメントとは異なるスコープに属すると見なされます。他の case ラベル ステートメントはすべて、switch ラベル ステートメントの本体と同じスコープに属しています。

チェック情報

グループ: 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.