2016-10-13 20 views
0

これは基本的な質問ですがお詫び申し上げますが、初めてというコロンが表示されています(struct)。これらのコロンは何をしていますか?C/C++ - uint8_t xのコロンの目的は何ですか:

struct gsm48_meas_res { 
    uint8_t rxlev_full:6, 
     dtx_used:1, 
     ba_used:1; 
    uint8_t rxlev_sub:6, 
     meas_valid:1, 
     spare:1; 
    uint8_t no_nc_n_hi:1, 
     rxqual_sub:3, 
     rxqual_full:3, 
     spare2:1; 
    uint8_t rxlev_nc1:6, 
     no_nc_n_lo:2; 
    uint8_t bsic_nc1_hi:3, 
     bcch_f_nc1:5; 
    uint8_t rxlev_nc2_hi:5, 
     bsic_nc1_lo:3; 
    uint8_t bsic_nc2_hi:2, 
     bcch_f_nc2:5, 
     rxlev_nc2_lo:1; 
    uint8_t rxlev_nc3_hi:4, 
     bsic_nc2_lo:4; 
    uint8_t bsic_nc3_hi:1, 
     bcch_f_nc3:5, 
     rxlev_nc3_lo:2; 
    uint8_t rxlev_nc4_hi:3, 
     bsic_nc3_lo:5; 
    uint8_t bcch_f_nc4:5, 
     rxlev_nc4_lo:3; 
    uint8_t rxlev_nc5_hi:2, 
     bsic_nc4:6; 
    uint8_t bcch_f_nc5_hi:4, 
     rxlev_nc5_lo:4; 
    uint8_t rxlev_nc6_hi:1, 
     bsic_nc5:6, 
     bcch_f_nc5_lo:1; 
    uint8_t bcch_f_nc6_hi:3, 
     rxlev_nc6_lo:5; 
    uint8_t bsic_nc6:6, 
     bcch_f_nc6_lo:2; 
} __attribute__ ((packed)); 

私はこれらのuint8_t変数に値を割り当てることでいくつかの問題に直面しています。当初はデフォルトの割り当てだと思っていましたが、他のすべての可能性を尽くした後、これらのコロンと関係があると思います。

答えて

2

これはビットフィールドであり、これは標準によって非常に不十分に規制されています。たとえば、

uint8_t rxlev_full:6, 
     dtx_used:1, 
     ba_used:1; 

は、「メモリのどこかに、6ビット、次に1ビット、次に1ビット」を意味します。ビットオーダーを移植可能にすることはできません。これはコンパイラー固有のものです。また、標準ビットフィールドは、_Bool,signed intおよびunsigned intに対してのみ定義されます。 uint8_tを使用するのは非標準の拡張です。

したがって、このコードが実際に何をするかは分かりません。詳細を知るためにコンパイラのマニュアルを読む必要があります。

関連する問題