C and C++


LANG.TYPE.BFSIGN : 符号属性が明示されていないビットフィールド

要旨

ビットフィールドの符号属性が、明示的に signed もしくは unsigned で定義されていません。

C99 の場合 _Bool 型のビットフィールドに対してはこのワーニングクラスは検出されません。

プロパティ

クラス名 Bit-field Signedness Not Explicit
日本語クラス名 符号属性が明示されていないビットフィールド
クラス分類 スタイル (style)
ニーモニック LANG.TYPE.BFSIGN
カテゴリー
MisraC2023 MisraC2023:6.1 Bit-fields shall only be declared with an appropriate type
Misra2012 Misra2012:6.1 Bit-fields shall only be declared with an appropriate type
Misra2004 Misra2004:6.4 Bit fields shall only be defined to be of type unsigned int or signed int
MisraC++2008 MisraC++2008:9-6-2 Bit-fields shall be either bool type or an explicitly unsigned or signed integral type.
  MisraC++2008:9-6-3 Bit-fields shall not have enum type.
MisraC++2023 MisraC++2023:12.2.1 Bit fields should not be declared
CERT-C CERT-C:INT12-C Do not make assumptions about the type of a plain int bit-field when used in an expression
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Bit-field Signedness Not Explicit"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

struct mystruct{
    int A               : 2; /* 'Bit-field Signedness Not Explicit' warning issued here */ 
    signed int B        : 2;                      /* explicitly signed */ 
    unsigned int C      : 2;                      /* explicitly unsigned */ 
};

typedef int plainint;
typedef signed int signedint;

struct myotherstruct{
    plainint D          : 2; /* 'Bit-field Signedness Not Explicit' warning issued here */ 
    signedint E         : 2;                      /* explicitly signed (in typedef) */ 
};

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。