2014-07-24 29 views
3

我不確定這是否可以編譯相關,但我使用的編譯器是IAR 7.10.3。初始化一個匿名結構的位域

我有一個結構類似如下:

struct A { 
    struct { 
    uint8_t x:1; 
    uint8_t y:2; 
    uint8_t z:5; 
    } b; 
}; 

並初始化它想:

struct A a = { 
    .b = 0xFF, 
}; 

現在,當我看到在內存中的結構,只有X位將被設置爲「1 ',其餘的將是零。

這是如何按照C標準行事的?

+0

最近問的問題與[this](http://stackoverflow.com/questions/24936022/designated-initializers-and-compound-literals-for-struct-in-c)類似。 –

+0

@他正在使用'IAR',並且位字段類型可以是實現定義的類型。 – ouah

+0

@this c99說'位字段應該是_Bool的合格或不合格版本,int,unsigned int或其他實現定義的類型。 –

回答

5
struct A a = { 
    .b = 0xFF, 
}; 

由編譯器解析爲

struct A a = { 
    .b = {0xFF}, 
}; 

這相當於

struct A a = { 
    .b = {0xFF, 0, 0}, 
}; 

用途:

struct A a = { 
    .b = {1, 3, 31}, 
}; 

有你的位字段的所有位設置爲1。或者使用與uint8_t和內部結構的聯合,並將第一個成員初始化爲0xFF