gpt4 book ai didi

c - 结构分隔变量

转载 作者:行者123 更新时间:2023-11-30 17:26:13 24 4
gpt4 key购买 nike

我正在尝试将 int16_t 变量分成结构内部。该结构保留在磁盘中并在重新启动时加载回来。旧的结构是

struct details
{
int a;
int16_t var1;
int16_t b;
} details_t

我改变的新的是

struct details
{
int a;
int16_t var1:15;
unit16_t var2:1;
int16_t b;
}details_t;

新的更改在重新启动后工作正常。但是这是正确的做法吗?我想要实现的是基于var2的变量var1具有双重含义是设置清除。由于 var2 存储二进制值,因此我将其声明为 uint16_t。分隔变量并将其声明为两种不同的数据类型( int16_t 和 uint16_t )是否合法。这将是现有堆栈中的更新,更新后应该可以无缝工作。另外,我无法在这些分开的变量 var1var2 上使用 set_bit 和clear_bit 等内核函数。我的机器是小尾数

最佳答案

您想保持向后兼容性。但不幸的是,C 标准在如何处理位字段方面为实现提供了很大的空间。 var1var2 最终可能会成为 2 个 16 位变量,这可能是您不想要的。

我建议使用手动位屏蔽和移位。使用位移位时请注意带符号的变量。如有必要,请使用无符号临时变量。

关于c - 结构分隔变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838845/

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