例如,我有这种结构格式
typedef struct{
tMY_STRUCT2 my_struct2;
u16 item1;
u8 item2[20];
u32 item3;
}tMY_STRUCT;
我怎样才能通过结构? 由于对齐不是那么容易,我不能只计算从SIZEOF(item)开始的结构的偏移量。
有什么办法吗?
原因:我需要启动大结构,这有一些条件,所以我需要在一个FOR循环内完成。
不要这样做。结构的要点是您无法统一处理其数据项。结构之于异构数据,就像数组之于同质数据。
在代码中一次初始化每个字段或将整个结构初始化为零。这些是唯一的良好实践选择。尤其是对齐将取决于机器架构、编译器等,因此如果您对代码进行看似微不足道的更改,例如重新排序声明中的字段,或者在不同的操作系统上运行或在其他地方编译,那么使用它的方法可能会中断.
选项:
memset(mystruct, 0, sizeof(mystruct));
或(我认为这是 C99) mystruct_t foo = {0};
或者只是初始化每个字段。
我不太明白 for 循环如何在这里为您提供帮助......但是没有很好的方法来迭代结构。
你可以在你的结构中设置一个指向对象的指针结构,然后通过 sizeof(ptr) 跳过它,但这太可怕了,你的同事会私刑处死你。