typedef struct a{
uint32 val1;
}A;
typedef struct b{
uint16 copy_val1;
}B;
void function1(A input)
{
B my_input;
my_input.copy_val1 = (uint16) input.val1; <-- Is this clean?
}
最初在设计struct a时,认为val1将包含两个16位值。但是我们选择只使用一个16位。
现在我将copy_val1的类型从uint32更改为uint16以节省内存。 我应该如何以干净的方式进行类型转换,并确保将val1中的16位值复制到copy_val1?
操作系统是MIPS架构中的vxworks。
答案 0 :(得分:1)
简单地将uint32值分配给uint16变量,而不使用强制转换就足够了。
但是,您冒着截断的风险。在分配之前,您应该考虑检查是否val1 > UINT16_MAX
。
另请注意,对于大于一个或两个机器寄存器的结构,应将指针传递给结构。否则你会招致一个可能很大的副本。但请注意语义的变化。
答案 1 :(得分:0)
那很干净。即使没有演员,旧的编译器也会接受这个。 请记住,您只传递了uint32值的最低16位。