メインコンテンツ

MISRA C:2023 Rule 23.3

A generic selection should contain at least one non-default association

R2024a 以降

説明

ルール定義

A generic selection should contain at least one non-default association 1 .

This rule comes from MISRA C™:2012 Amendment 3.

根拠

既定以外の関連を選択できない場合、総称選択の default 関連が型チェックなしで選択されます。default 関連のみからなる _Generic ステートメントは常に default 選択を選択するため、有用ではありません。

少なくとも 1 つの既定以外の関連を総称選択に含めてください。総称選択で型が一致しない場合に制約違反を導入する予定の場合は、default 関連を省略してください。

Polyspace 実装

Polyspace® は、_Generic ステートメントに default 関連のみが含まれている場合に、このルールの違反を報告します。

トラブルシューティング

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

すべて展開する

この例の _Generic ステートメント get_type_id_only_default は、default 関連のみで構成されています。関数 foo() で任意の型を指定してこの _Generic ステートメントを呼び出すと、default 関連が選択されます。この総称選択は有用ではないため、Polyspace は違反を報告します。

 #define get_type_id(x) ( _Generic((x) /* Compliant */ \
                                , char : 0       \
                                , int  : 1       \
                                ))

#define get_type_id_with_default(x) ( _Generic((x) /* Compliant */ \
                                , char : 0       \
                                , int  : 1       \
                                , default : 3    \
                                ))

#define get_type_id_only_default(x) ( _Generic((x) /* Noncompliant */ \
                                , default : -1   \
                                ))

void foo() {
    int x, y;
    y = get_type_id(x);
    y = get_type_id_with_default(x);
    y = get_type_id_only_default(x);
}

_Generic ステートメント get_type_idget_type_id_with_default には既定以外の関連が含まれているため、Polyspace は違反を報告しません。

チェック情報

グループ: 総称選択
カテゴリ: 推奨
AGC カテゴリ: 推奨

バージョン履歴

R2024a で導入


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.