2017-08-16 36 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