MISRA C:2023 Rule 23.4
説明
ルール定義
A generic association shall list an appropriate type 1 .
根拠
総称選択の制御式では、型と関連リストの型名を比較する前に、lvalue 変換が行われます。この lvalue 変換では、次の処理が行われます。
const、volatile、atomicなどの最上位の修飾子を削除する関数と配列をポインターに変換する
関連リストに修飾子付きの型、配列、または関数の型が含まれている場合、制御式が関連リストに一致することはありません。次のコードについて考えます。
typedef const uint32_t const_int; #define get_type_id_of(X) _Generic((X), const_int : 0, int : 1) const_int x = 7; get_type_id_of(x);
x の型が int と一致するので、マクロ get_type_id_of(x) は 1 と評価されます。この動作を回避するには、関連リストにある適切な型を使用します。名前のない struct または union はすべて個別の型なので、関連リストの名前のない struct または union を使用することは、このルールに違反します。制御式の名前のない struct は、関連リストの名前のない struct とは一致しません。一方、制御式の名前のない struct は、既定の関連とは一致します。
Polyspace 実装
総称選択の関連リストに次のいずれも含まれていない場合には、ルール チェッカーは違反を報告します。
const修飾子付きの型volatile修飾子付きの型atomic型配列または関数の型
名前のない型
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: 総称選択 |
| カテゴリ: 必要 |
| 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.