gpt4 book ai didi

c - 如何处理具有运行时确定布局的 C 结构?

转载 作者:行者123 更新时间:2023-11-30 16:01:17 25 4
gpt4 key购买 nike

在我的代码中,我需要处理共享几乎所有成员的两个结构之一,但它们的偏移量只能在运行时确定。像这样的东西:

struct type1 {int a, char b[8], int c};
struct type2 {int a, char b[16], int c};

我对这些结构的布局无能为力,因为它是由硬件决定的。

因此,每次我想要访问成员(member)时,我都需要执行以下操作:

void foo(void *data)
{
if (is_type1)
((struct type1 *)(data))->c = 5;
else
((struct type2 *)(data))->c = 5;
}

这不是很优雅。

我想知道除了在宏中隐藏所有这些丑陋之外,是否有一些更优雅的方法来处理这种情况,这是在没有更好的解决方案的情况下我将采取的解决方案。

谢谢。

最佳答案

如果您无法更改顺序,我会将它们加入到与 union 相同的结构中:

struct type12 { union { struct type1 type1; struct type2 type2; } types; int type; };

void foo(struct type12 *data)
{
if (data->type == 1)
data->types.type1.c = 5
else
data->types.type2.c = 5;
}

也许不是一个很大的改进,但你可以避免类型转换......

关于c - 如何处理具有运行时确定布局的 C 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6881952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com