Огурцов
Oct 27 2017, 11:48
pls, сообразите за меня, как записать нечто такое:
Код
typedef struct
{
void (*on_event)(my_struct * a_struct);
} my_struct;
void event_handler(my_struct * a_struct);
чтобы gcc не ругался
Kabdim
Oct 27 2017, 11:59
C без плюсов?
Код
struct my_struct_t;
struct my_struct_t
{
void (*on_event)(struct my_struct_t * a_struct);
};
typedef struct my_struct_t my_struct;
void event_handler(my_struct * a_struct);
Если меня не подводит память об особенностях чистого C.
Огурцов
Oct 27 2017, 12:23
Цитата(Kabdim @ Oct 27 2017, 12:59)
typedef struct my_struct_t my_struct;
ну да, это должно быть позволить не писать везде
struct my_struct_t
Код
cat 1.c
#include <stdio.h>
typedef struct _my_struct{
void (*on_event)(struct _my_struct * a_struct);
char *eventarg;
} my_struct;
void parcearg(my_struct *s){
printf("arg: %s\n", s->eventarg);
}
int main(int argc, char **argv){
my_struct s = {parcearg, NULL};
int i;
for(i = 1; i < argc; ++i){
s.eventarg = argv[i];
s.on_event(&s);
}
return 0;
}
gcc 1.c -Wall -Werror -Wextra && ./a.out hello world
arg: hello
arg: world
Огурцов
Oct 27 2017, 14:23
в вашем варианте предупреждения о не соответствии типов должны быть, хотя работать будет, у меня сейчас так и работает
зы: был не прав, собирается без предупреждений, на самом деле предупреждение было на void
Специально же указал "-Wall -Werror -Wextra", чтобы было понятно, что никаких проблем нет!
// я вообще абсолютно все свои поделки только с этими флагами и собираю на стадии разработки, иначе нельзя.