メインコンテンツ

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

MISRA C:2012 Dir 4.6

基本数値型の代わりに、サイズと符号属性を示す typedefs を使用する必要があります。

説明

命令の定義

typedefs that indicate size and signedness should be used in place of the basic numerical types 1 .

根拠

割り当てられるメモリ量が重要な場合、その長さが示されている型を使用することで、各オブジェクトに予約されたストレージの量が明確になります。

Polyspace 実装

Polyspace® は、整数型、浮動小数点型、複素数型を基本的な数値型とみなします。基本的な数値型としてのデータ型に、ビット単位の有効なサイズが含まれていない場合、または一般的に使用されるサイズ関連の単語が含まれていない場合は、違反が報告されます。ビット単位の有効なサイズは、8 の倍数です。サポートされているサイズ関連の単語は、bit、byte、word、およびその他の一般的なキーワードです。

Polyspace は、関数プロトタイプ、型宣言、変数宣言、キャスト式、および sizeof 演算子でデータ型をチェックします。

Polyspace は、以下の使用に対しては違反を報告しません。

  • キャスト変換での複素数型と虚数型の使用。

  • size_t 型と ptrdiff_t 型の使用。

  • プレーンな char の使用。

  • main() 関数の戻り値の型としての int の使用。

  • main() 関数のパラメーターのデータ型としての int の使用。

  • 既知の boolean 型 (bool_Bool など) の使用。

ヘッダー stdint.h は、可能な最小または最速の型のサイズを表す、いくつかの固定幅の型を定義します。たとえば、int_least8_tunit_fast_8_t などの型があります。Fixed with integer typesを参照してください。これらの型が使用されている場合、Polyspace は違反を報告します。たとえば、以下のコードでは、24 ビットの変数 var_globe24 を 8 ビット以上の整数型として宣言しています。

int_least8_t var_glob24; 
この型は変数のサイズを正しく表していないため、Polyspace は違反を報告します。

トラブルシューティング

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

すべて展開する

この例は、準拠している基本的な数値型の typedef と非準拠の typedef を示しています。基本的な数値型の typedef でビット単位の有効なサイズを指定していない場合、Polyspace は違反を報告します。wordbyte などのキーワードを使用したサイズの指定は、このルールに準拠しています。

typedef unsigned int uint32_t;     /* Compliant */
typedef unsigned short WORD;       /* Compliant */
typedef unsigned int DWORD;        /* Compliant */
typedef unsigned long qword;       /* Compliant */
typedef unsigned int u3_t;         /* Noncompliant */

int x = 0;                         /* Noncompliant */
uint32_t y = 0;

チェック情報

グループ: Code design
カテゴリ: 推奨
AGC カテゴリ: 推奨

バージョン履歴

R2014b で導入

すべて展開する


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.