Перейти к содержанию
    

typedef struct на сообразительность

pls, сообразите за меня, как записать нечто такое:

 

typedef struct
{
    void (*on_event)(my_struct * a_struct);
} my_struct;

void event_handler(my_struct * a_struct);

 

чтобы gcc не ругался

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в вашем варианте предупреждения о не соответствии типов должны быть, хотя работать будет, у меня сейчас так и работает

 

зы: был не прав, собирается без предупреждений, на самом деле предупреждение было на void

 

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Специально же указал "-Wall -Werror -Wextra", чтобы было понятно, что никаких проблем нет!

 

// я вообще абсолютно все свои поделки только с этими флагами и собираю на стадии разработки, иначе нельзя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...