MISRA C:2012 Rule 8.17
At most one explicit alignment specifier should appear in an object declaration
R2024a 以降
説明
ルール定義
At most one explicit alignment specifier should appear in an object declaration 1 .
This rule comes from MISRA C™:2012 Amendment 3.
根拠
宣言でアライメント指定を指定することが目的の場合に、複数のアライメント指定子を使用するとその意図が不明瞭になり、コードの解析とレビューが難しくなる可能性があります。
同一の宣言で複数のアライメント指定子を指定する場合は、最も厳密な要件がオブジェクトに適用されます。たとえば次のコードの抜粋では、変数 varWithTwoAlign が 2 つのアライメント指定子を指定して宣言されていますが、最も厳密なアライメントに必要な境界に、配置されます (ほとんどのプラットフォームでは double)。
_Alignas(float) _Alignas(double) int varWithTwoAlign; //Noncompliant
たとえば次のコードの抜粋では、conditionalAlignVar のアライメントの値は、環境変数 IS_TARGET が定義されている場合は 4、それ以外の場合は 16 になります。
#ifdef IS_TARGET
#define ALIGN_SPEC 4
#else
#define ALIGN_SPEC 16
#endif
#define ALIGNAS_PLATFORM(expr) _Alignas(expr)
void func() {
ALIGNAS_PLATFORM(ALIGN_SPEC) int conditionalAlignVar;
//...
}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.