メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2023 Rule 8.15

The argument of an integer constant macro shall have an appropriate form

R2024a 以降

説明

ルール定義

The argument of an integer constant macro shall have an appropriate form 1 .

根拠

オブジェクトの宣言が複数あり、競合するアライメント指定がそれらの宣言に含まれていることは、未定義の動作です。

  • _Alignas を使用してオブジェクトのアライメントを明示的に指定する必要がある場合は、そのオブジェクトのすべての宣言で同一のアライメントを指定します。

  • オブジェクトのアライメントを指定する必要がない場合は、そのオブジェクトのどの宣言にも _Alignas を使用しないでください。

宣言と定義で明示的なアライメント指定を使用して、ハードウェア インターフェイスまたは Single Instruction Multiple Data (SIMD) 操作のメモリ アライメント要件と一致させるなどして、コードの実行を最適化します。

Polyspace 実装

コーディング ルール チェッカーは、同じ変数の複数の宣言に競合するアライメント指定がある場合に、このルールの違反を報告します。

Polyspace® は、構造体の宣言がこのルールに準拠しているかどうかを確認しません。

トラブルシューティング

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

すべて展開する

myHeader.h

#include <stdint.h>

extern _Alignas (4) int16_t var_align_match;
extern int16_t var_no_align;
extern _Alignas (float) int16_t var_align_no_align; //Noncompliant
extern _Alignas(float) int16_t var_align_type_other_type;

myFile.c

#include "myHeader.h"

_Alignas (4) int16_t var_align_match;
int16_t var_no_align;
int16_t var_align_no_align; 
_Alignas(double) int16_t var_align_type_other_type; //Noncompliant

この例では、ヘッダー ファイル myHeader.h で明示的なアライメント指定を使用していくつかの変数が宣言されています。変数は、myHeader.h をインクルードする myFile.c ファイルでもう一度宣言されます。Polyspace は、競合するアライメント指定を持つ変数に対してコーディング ルール違反を報告します。

  • var_align_no_align — 変数は myFile.c ではアライメント指定を使用せずに宣言されていますが、myHeader.h ではアライメント指定を使用して宣言されています。

  • var_align_type_other_type — この変数は、myHeader.h では float のアライメント要件を使用して宣言されており、myFile.c では double のアライメント要件を使用して宣言されています。

いずれの場合でも、Polyspace はより厳密なアライメント指定を含む変数宣言について違反を報告します。

変数 var_align_matchvar_no_align は両方のファイルで同じアライメント要件を使用して宣言されているため、これらの変数の宣言はこのコーディング ルールに準拠しています。

チェック情報

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