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 ++的最佳方法
答案 0 :(得分:0)
处理所有这三种类型的单个函数将不起作用,因为每个成员的大小和类型都不同,即使名称相同。
例如,假设每个字节的data
字段中都存储值1,则假定float
具有大字节序排列和IEEE 754单精度表示:
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)
答案 1 :(得分:0)
.tl-timemarker-content-container {
background-color:#cc0000 !important;
}