メインコンテンツ

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) が使用されている場合に違反を報告します。

トラブルシューティング

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

すべて展開する

#include <stdint.h>

struct {
    int32_t varNoAlign;
    _Alignas(16) int32_t varAlign;
    _Alignas(0) int32_t varNoAlignZero; //Noncompliant.
} data;

この例では、構造体 data に、アライメント指定が異なる複数のメンバーが含まれています。_Alignas (0) が使用されているため、Polyspace は、varNoAlignZero の宣言をコーディング ルールに準拠していないものとして報告します。

チェック情報

グループ: 宣言と定義
カテゴリ: 推奨
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.