MISRA C:2023 Rule 8.16
The alignment specification of zero should not appear in an object declaration
R2024a 以降
説明
ルール定義
The alignment specification of zero should not appear in an object declaration 1 .
根拠
_Alignas(expr) type var のオペランド expr がゼロと評価される場合、指定子はオブジェクト var のアライメントに影響しません。
オブジェクトのアライメントを指定することが目的の場合は、_Alignas のオペランドにゼロ以外の値を指定してください。プラットフォーム実装の詳細などの条件に基づいてアライメント指定を無効にすることが目的の場合は、プリプロセッサ命令を使用してこの要件を抽象化してください。
たとえば次のコードの抜粋は、Linux プラットフォームではアライメントを指定するが、その他のプラットフォームではそのアライメント指定を無効にする方法を示しています。
#ifdef __linux__
#define ALIGN_SPEC 16
#else
#define ALIGN_SPEC 0
#endif
#define ALIGNAS_PLATFORM(expr) _Alignas(expr)
void func() {
ALIGNAS_PLATFORM(ALIGN_SPEC) int conditionalAlignVar;
//...
}Polyspace 実装
コーディング ルール チェッカーは、変数宣言で _Alignas(0) が使用されている場合に違反を報告します。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: 宣言と定義 |
| カテゴリ: 推奨 |
| 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.