gpt4 book ai didi

c - 是否有理由避免使用位域结构成员?

转载 作者:太空狗 更新时间:2023-10-29 16:28:37 24 4
gpt4 key购买 nike

我早就知道 C 中有位域,偶尔我会用它们来定义密集结构:

typedef struct Message_s {
unsigned int flag : 1;
unsigned int channel : 4;
unsigned int signal : 11;
} Message;

当我阅读开源代码时,我反而经常发现位掩码和位移位操作来存储和检索手动位字段中的此类信息。这很常见,我不认为作者不知道位域语法,所以我想知道是否有理由通过位掩码滚动位域和您自己的移位操作而不是依赖编译器生成获取和设置此类位域的代码。

最佳答案

Why other programmers use hand-coded bit manipulations instead of bitfields to pack multiple fields into a single word?

这个答案是基于意见的,因为问题很开放:

  • 许多程序员不知道位域的可用性,或者不确定它们的可移植性和精确语义。有些人甚至不相信编译器生成正确代码的能力。他们更喜欢编写他们理解的明确代码。

    正如 Jade 米杆评论的那样,这种态度 Root 于现实生活经验as explained in this article .

  • 位域的实际内存布局是实现定义的:如果内存布局必须遵循精确的规范,则不应使用位域,并且可能需要手动编码位操作。

  • 有符号类型位域中有符号值的处理是实现定义的。如果带符号的值被打包到一系列位中,则手动编码访问函数可能更可靠。

关于c - 是否有理由避免使用位域结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46021790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com