реклама на сайте
подробности

 
 
> typedef struct на сообразительность
Огурцов
сообщение Oct 27 2017, 11:48
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



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

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

void event_handler(my_struct * a_struct);


чтобы gcc не ругался
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Kabdim
сообщение Oct 27 2017, 11:59
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



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.
Go to the top of the page
 
+Quote Post
Raven
сообщение Oct 27 2017, 12:08
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 491
Регистрация: 16-01-05
Из: Санкт-Петербург
Пользователь №: 1 987



Как GCC ругается-то?
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 27 2017, 12:23
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Kabdim @ Oct 27 2017, 12:59) *
typedef struct my_struct_t my_struct;

ну да, это должно быть позволить не писать везде struct my_struct_t

Сообщение отредактировал Огурцов - Oct 27 2017, 12:24
Go to the top of the page
 
+Quote Post
Эдди
сообщение Oct 27 2017, 13:39
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Код
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
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 27 2017, 14:23
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



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

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


Сообщение отредактировал Огурцов - Oct 27 2017, 14:45
Go to the top of the page
 
+Quote Post
Эдди
сообщение Oct 27 2017, 20:04
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



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

// я вообще абсолютно все свои поделки только с этими флагами и собираю на стадии разработки, иначе нельзя.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016