重複の可能性:
「unsignedtemp:3」とはどういう意味ですか
のstruct
定義は次のようになります。
typedef struct
{
uint32_t length : 8;
uint32_t offset : 24;
uint32_t type : 8;
} A;
:8
私はこれまでこの種の定義を見たことがありませんが、それはどういう意味:24
ですか?
重複の可能性:
「unsignedtemp:3」とはどういう意味ですか
のstruct
定義は次のようになります。
typedef struct
{
uint32_t length : 8;
uint32_t offset : 24;
uint32_t type : 8;
} A;
:8
私はこれまでこの種の定義を見たことがありませんが、それはどういう意味:24
ですか?
それはビットフィールドを定義しています。これは、コンパイラにlength
8ビット、offset
24ビット、および8ビットでtype
あることを通知します。
次のリンクを参照してください。それらはビットフィールドです。http://www.cs.cf.ac.uk/Dave/C/node13.html
http://en.wikipedia.org/wiki/Bit_field
#include <stdio.h>
typedef unsigned int uint32_t;
#pragma pack(push, 1)
typedef struct
{
uint32_t length : 8;
uint32_t offset : 24;
uint32_t type : 8;
} A;
typedef struct
{
uint32_t length;
uint32_t offset;
uint32_t type;
} B;
#pragma pack(pop)
int main()
{
printf("\n Size of Struct: A:%d B:%d", sizeof(A), sizeof(B));
return 0;
}
構造体Aのサイズは5バイトになりますが、Bのサイズは12バイトになります。
この表記は、ビットフィールド、つまりその構造変数のビット数のサイズを定義します。