gpt4 book ai didi

c - 在单个函数中初始化具有相同成员名称和成员计数的多个结构

转载 作者:行者123 更新时间:2023-11-30 19:28:14 25 4
gpt4 key购买 nike

typedef struct
{
int data;
int size;
} s1;

typedef struct
{
char data;
int size;
} s2;

typedef struct
{
float data;
char size;
} s3;

func(void *p)
{
/*this should be generic to all structure.*/
/* Need to do for removing duplicate codes*/
/* p->data=1; p->size=0; this should be generic */
}
int main()
{ s1 a;s2 b; s3 c;
func(a);func(b);func(c);
}

这里需要初始化的这个结构体是随机的。要求是将“func”保留为所有结构类型的通用函数。

请建议 C 语言而非 C++ 中的最佳方法

最佳答案

处理所有三种类型的单个函数将不起作用,因为每个成员的大小和类型都不同,即使名称相同。

例如,假设 float 采用大端字节顺序和 IEEE 754 单精度表示,则将值 1 存储在每个数据的 data 字段中如下所示:

a.data
---------------------
| 00 | 00 | 00 | 01 |
---------------------

b.data
------
| 01 |
------

c.data
---------------------
| 3f | 80 | 00 | 00 |
---------------------

因此,如果不了解实际类型,就无法准确执行您正在寻找的操作。

最接近您想要的就是为每种类型创建一个函数,然后使用带有 _Generic 的宏来包装调用哪个函数。

void func_s1(s1 *p)
{
...
}

void func_s2(s2 *p)
{
...
}

void func_s3(s3 *p)
{
...
}

#define func(p) _Generic((p), \
s1: func_s1, \
s2: func_s2, \
s3: func_s3)(&p)

关于c - 在单个函数中初始化具有相同成员名称和成员计数的多个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54391328/

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