3

まず、それは可能ですか?はいの場合、以下の宣言で何が間違っていますか?

struct mybitfields
{
    uint8_t a : 4;
    uint16_t c : 12;
} test;
4

2 に答える 2

4

あなたがしていることは可能ですが、移植性はありません: C99 標準では、ビットフィールドの基本型は_Boolsigned int、またはunsigned intである必要があり、実装定義の型をビットフィールドで使用できるようになっています (C90 では、符号なしの署名が必要です) int。ビットフィールドの基本型; 他の型は許可されていません)。

C99 および C90 標準の適切な章への参照については、この回答を参照してください

structよりも小さいサイズのビット フィールドのを定義することが目標である場合はunsigned int、移植性のためにビット シフトを使用することをお勧めします。

于 2013-04-22T21:40:15.053 に答える
3

コードはほとんどのコンパイラで受け入れられますが、厳密に言えば、ビットフィールドの基本型は(signed / unsigned) int.

uint8_tは の typedef でunsigned charあり、uint16_tおそらく の typedef でunsigned shortあり、これらの型から作成されたビットフィールドは準拠していません。

于 2013-04-22T21:41:32.007 に答える