【发布时间】:2019-03-17 10:22:06
【问题描述】:
假设,我有以下结构:
struct my_struct {
uint32_t bf1 : 3;
uint32_t bf2 : 5;
uint32_t bf3 : 16;
uint32_t bf4 : 8;
};
以及以下枚举:
enum bf1_values {
Val1 = 0x0;
Val2 = 0x4;
Val3 = 0x7;
};
另外,bf1 的 getter 和 setter 函数:
uint32_t bf1_getter() {
return global_struct.bf1; // cast value to (uint32_t)?
}
void bf1_setter(enum bf1_values val) {
global_struct.bf1 = val; // cast enum to (uint32_t)?
}
为了安全起见,我应该在 getter 和 setter 函数中使用类型转换吗?
编辑:
结构应该被发送到硬件。
EDIT2:
我想要实现的是真正确定enum 将被正确写入位域,并从位域中正确读取。
【问题讨论】:
-
类型转换与安全无关,通常恰恰相反。
-
@JoachimPileborg 好的,但是这种代码编写的正常/良好做法是什么?
-
编译时没有警告吗?然后你不需要铸造。否则你必须确保代码是安全的,强制转换对你没有帮助(它只会帮助你关闭编译器警告)。
-
哦,顺便说一句,如果位域结构要被硬件使用,那么你应该确保它被正确打包(所以任何字段之间都没有填充)。
-
@JoachimPileborg 关于包装,我知道。无论如何,谢谢。