2

例如,我有这种结构格式

typedef struct{
  tMY_STRUCT2 my_struct2;
  u16 item1;
  u8 item2[20];      
  u32 item3;
}tMY_STRUCT;

我怎样才能通过结构? 由于对齐不是那么容易,我不能只计算从SIZEOF(item)开始的结构的偏移量。

有什么办法吗?

原因:我需要启动大结构,这有一些条件,所以我需要在一个FOR循环内完成。

4

2 回答 2

5

不要这样做。结构的要点是您无法统一处理其数据项。结构之于异构数据,就像数组之于同质数据。

在代码中一次初始化每个字段或将整个结构初始化为零。这些是唯一的良好实践选择。尤其是对齐将取决于机器架构、编译器等,因此如果您对代码进行看似微不足道的更改,例如重新排序声明中的字段,或者在不同的操作系统上运行或在其他地方编译,那么使用它的方法可能会中断.

选项:

memset(mystruct, 0, sizeof(mystruct));

或(我认为这是 C99) mystruct_t foo = {0};

或者只是初始化每个字段。

于 2012-06-14T15:34:55.683 回答
0

我不太明白 for 循环如何在这里为您提供帮助......但是没有很好的方法来迭代结构。

你可以在你的结构中设置一个指向对象的指针结构,然后通过 sizeof(ptr) 跳过它,但这太可怕了,你的同事会私刑处死你。

于 2012-06-14T15:42:08.893 回答