我正在尝试了解我所拥有的用例的匿名工会.用例是能够在函数指针表中使用给定方法的不同原型.例如,在下面的代码片段中,myfunc可以有两个变体,一个只接受一个字符串;和一个可以接受其他参数的人.
这是我的代码片段 –
typedef struct my_struct
{
union{
int (*myfunc)(char*);
int (*myfuncEx)(char*, int);
};
}my_struct_t;
int myfunc_imp(char* x)
{
printf("This is myfunc_imp - %s\n", x);
}
int myfuncEx_imp(char* x, int y)
{
printf("This is myfuncEx_imp - %s\n", x);
printf("This is myfuncEx_imp - %d\n", y);
}
int main()
{
char *string = "Hello World";
my_struct_t me1, me2;
me1.myfunc = myfunc_imp;
me1.myfunc(string);
me2.myfuncEx = myfuncEx_imp;
me2.myfuncEx(string, 7);
static const me3 = {myfuncEx_imp};
me3.myfuncEx(string, 8);
return 0;
}
示例me1和me2似乎提供了正确的结果.
但是例子me3.在我试图在结构内静态初始化联合的地方,抛出这个错误 –
warning: initialization makes integer from pointer without a cast
error: request for member `myfuncEx' in something not a structure or union
有人能指出在结构中初始化匿名联合的正确方法.
编辑:我以非常明显错误的方式声明结构错误,正确的方式 –
static const my_struct_t me3 = {myfuncEx_imp};
最佳答案 我昨天碰到了这个.如果不指定union成员,则无法初始化union.否则它是模棱两可的.所以,
static const my_struct_t me3 = { .myfuncEx = myfuncEx_imp };