2017-08-16 106 views
0

如何確定位域的順序?我可以通過執行x.c來更改位域的元素,其中x是結構類型的變量。我試圖掩飾它並將其打印出來,但我只能打印結構中的每個元素,而不是整個變量。我試圖給一個位域的元素指定一個指針,但是它出現了一個錯誤。確定C編譯器的位域順序的最佳方法是什麼?例如,這個結構將以什麼順序表示?確定位域的順序C

struct bit_fields 
{ 
unsigned int a : 6, 
      b : 8, 
      c : 18; 
} 
+1

爲每個字段準備一個具有良好識別位模式的實例,memcpy將它存儲到適當大小的無符號字符數組中,並查看每個字段的位置。 –

回答

0

根據C11,章§6.7.2.1/ P11

[....]位字段的分配單位(高階內 低階的順序或低階到高階)是實現定義的。未指定可尋址存儲單元的對齊方式 。

要知道的最好方法是在您的平臺上檢查您的編譯器文檔和ABI。

+0

對不起,聽起來像一個完整的初學者,但什麼是ABI?我在哪裏可以檢查它? – danielwestfall

+0

@danielwestfall https://en.wikipedia.org/wiki/Application_binary_interface –

+0

@danielwestfall ABI是「應用程序二進制接口」,它是您的特定系統的低級框架,它指定事物如何在內存中分配等等。 – Lundin