Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: typedef struct на сообразительность
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Огурцов
pls, сообразите за меня, как записать нечто такое:

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

void event_handler(my_struct * a_struct);


чтобы gcc не ругался
Kabdim
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.
Raven
Как GCC ругается-то?
Огурцов
Цитата(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
Огурцов
в вашем варианте предупреждения о не соответствии типов должны быть, хотя работать будет, у меня сейчас так и работает

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

// я вообще абсолютно все свои поделки только с этими флагами и собираю на стадии разработки, иначе нельзя.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.