2013-04-22 38 views
3

首先,是否有可能這樣做? 如果是,我在下面的聲明中做錯了什麼?有沒有辦法用位域聲明無符號的固定寬度整數?

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

這聽起來有點矛盾。你想要做什麼?爲什麼你需要你的4位整數是16位寬? – Medinoc 2013-04-22 21:25:17

+6

給定的代碼有什麼問題? – Arun 2013-04-22 21:26:22

+0

我有一個解決我的問題,只是想知道這是否可能在所有或不? – Gokul 2013-04-22 21:30:38

回答

4

雖然你在做什麼是可能,它不是便攜式:C99標準說位字段基本類型必須是_Boolsigned int,或unsigned int,從而實現自定義類型爲與位域一起使用(C90要求在無符號的int上簽名爲位域的基本類型;不允許其他類型)。

請參閱this answer,以參考適用於C99和C90標準的章節。

如果你的目標是定義一個大小小於unsigned int的位域的struct,那麼最好使用位移來實現可移植性。

3

您的代碼將被大多數編譯器接受,但嚴格來說,位域的基本類型必須是(signed/unsigned) int

uint8_tunsigned char一個typedef,並uint16_t可能是用於unsigned short一個typedef,並從這些類型由位域不合格。

相關問題