Я пытаюсь понять анонимные союзы для использования. Вариант использования должен иметь возможность использовать разные прототипы данного метода в таблице указателей функций. Например, в следующем фрагменте кода myfunc может иметь два варианта: один, который принимает только строку; и тот, который может принимать дополнительные параметры.Анонимный союз в C
Вот мой код snippet-
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;
}
Пример МЕ1 и те2, кажется, обеспечивают правильные результаты. Но пример me3. Где я пытаюсь статически инициализировать объединения в структуре, бросает это error-
warning: initialization makes integer from pointer without a cast
error: request for member `myfuncEx' in something not a structure or union
Может кто-то указать правильный путь инициализации анонимного объединения в структуре.
Edit: я объявляя-структуру неправильно в очень четко неправильно, правильно ПУТЬ
static const my_struct_t me3 = {myfuncEx_imp};
Попробуйте 'static const my_struct_t me3 = {myfuncEx_imp};'. – owacoder
wow спасибо, это было чисто немым с моей стороны. Спасибо чувак. –
Есть ** no ** анонимные 'union' или' struct's. Но есть _анонимные структуры или члены союза. То есть «анонимное» свойство принадлежит к окружающему 'struct' /' union', а не к анонимному 'struct'' union'. Итак, ** в теории ** ** может ** быть также анонимным членом 'int'. (просто мысленный эксперимент, стандарт этого не позволяет, потому что вы не могли бы ссылаться на него,) – Olaf