このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C:2023 Rule 21.23
All operand arguments to any multi-argument type-generic macros declared in <tgmath.h> shall have the same standard type
R2024a 以降
説明
ルール定義
All operand arguments to any multi-argument type-generic macros declared in <tgmath.h> shall have the same standard type 1 .
根拠
ジェネリック型のマクロの引数のすべてに同じ標準の型を使用すると、マクロ式の評価で使用される型が明確になります。
たとえば、pow()
マクロの両方の引数に float
変数を使用すれば、このマクロ式の評価が float
型の精度の要件に従うことが明確になります。一方、片方の引数が float
で、もう片方の引数が double
である場合、評価でどの型が使用されるのかが明確ではありません。
拡張された実数型を使用するプラットフォームでは、浮動小数点データ型が精度を基準に厳密に順序付けられていない場合があるため、マクロ式の評価で使用される型によって、実際に桁落ちが生じる可能性もあります。
Polyspace 実装
tgmath.h
で宣言されたジェネリック型のマクロの引数のすべてで、(整数プロモーションが整数型に適用された後に) 同じ標準の型が使用されない場合、ルール チェッカーは違反を報告します。たとえば、ルール チェッカーは次の場合に違反を報告します。
一方の引数が整数型で、もう一方の引数が浮動小数点型である。
(整数プロモーションが適用された後に) 一方の引数が整数型で、もう一方の引数がそれとは異なる種類の整数型である。たとえば、一方の引数の型が
char
、short
、またはint
で、もう一方の引数の型がlong
である場合。一方の引数が実質的な実数の浮動小数点型で、もう一方の引数が実質的な複素数の浮動小数点型である。実質的な型についての詳細は、
MISRA C:2012 Rule 10.1
を参照してください。一方の引数が浮動小数点型で、もう一方の引数がそれとは異なるサイズの浮動小数点型である。
frexp
などの一部の関数では、最後の引数が出力引数として使用されるように意図されています。ルール チェッカーはルールの違反をチェックするときに、この出力引数をスキップします。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
グループ: 標準ライブラリ |
カテゴリ: 必要 |
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.