1

次のコードをコンパイルしようとしています。

union Bool
{
  bool b[8] : 8; // (1)
  bool b0,b1,b2,b3,b4,b5,b6,b7 : 1;
};

ただし、行 (1) はコンパイルされません。配列のビット アラインメントの構文は何ですか?

4

1 に答える 1

1

C ではビットの配列を宣言できません。

配列の概念はポインターに基づいており、バイト内の個々のビットではなく、バイトへのポインターのみを持つことができます。C ビット フィールドを使用すると、整数コンポーネントをコンパイラが既定でパックするよりも少ないメモリにパックできます。配列は整数ではないため、配列をビット フィールドにパックすることはできません。標準について詳しく知りたい場合は、ISO/IEC 9899 - Programming languages - C (§6.7.2.1 を探してください) で見つけることができます。

速度が必要な場合は、bool の配列の和集合を使用できます。コンパクトなメモリ フットプリントが必要な場合は、マクロを定義して、ビット フィールドへのより便利なアクセスを提供できます。

于 2011-04-12T11:41:16.940 に答える