我有一个小程序,用于使用offsetof()
运算符打印结构成员的偏移量。
我在许多情况下使用这个程序,其中所讨论的结构是不同的,因此我需要为每个项目(以及我对结构所做的每次修改)重新编程代码。由于这些结构往往相当大(控制和状态结构),更新会消耗大量时间。
我想要的是一种可以使用offsetof()
等效方法的方法,但是第二个参数将是成员的名称,以字符串形式给出,而不是在语句中对其进行硬编码。
为简化起见,假设结构由 32 位字的单个字和数组组成,因此偏移量始终是 4 的倍数。
此外,欢迎使用替代方法来代替名称字符串。
[请注意,尽管成员都是字大小的,但仅通过计算成员来计算地址并不是一个好的解决方案,因为编译器可能会在成员之间添加填充。正如一个答案(已被删除)所建议的那样,使用 packed 属性可以通过删除填充来解决问题,这不是一个有效的解决方案,因为定义结构的实际应用程序可能会使用填充来优化内存访问]