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

 
 
> указатель на ф-ю, корректно ли делаю?
Метценгерштейн
сообщение Mar 1 2015, 18:25
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



объявил прототип
Код
typedef void (*timer_callback_t)(uint8_t);


теперь в структуре создаю переменную этого типа
Код
typedef struct  
{
...
...
    timer_callback_t     callback;
} timer_struct_t;


вот сама ф-я, в которую передается как параметр адрес другой ф-ии
Код
uint8_t timer_create(timer_mode_t _mode, uint32_t _time, timer_callback_t _callback)
{

}


пока не ругается компилятор.

А вот когда создаю прототип ф-ии timer_create, то сразу ошибка компиляции.
Так корректно обращаться с указателями на ф-ии?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Mar 1 2015, 18:55
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



я пока специально- для интриги- не стал ошибку компилятора показывать. Думал, уже на этом этапе мне здесь скажут, что все не так.
Тогда продолжаем

разумеется, после структуры создаю объект типа указателя
Код
static timer_struct_t   timer[10];


тип timer_mode_t определен сразу перед структурой. Простой enum

создаю прототип
Код
typedef void (*timer_callback_t)(uint8_t);


//static timer_callback_t    callback    = 0;
uint8_t timer_create(timer_mode_t, uint32_t, timer_callback_t);


получаю кучу ошибок
http://c2n.me/3dojOWV
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Mar 1 2015, 22:29
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(Метценгерштейн @ Mar 1 2015, 18:55) *
я пока специально- для интриги- не стал ошибку компилятора показывать. Думал, уже на этом этапе мне здесь скажут, что все не так.
Тогда продолжаем


cranky.gif
Ошибка либо в невыразимо кривом компиляторе, либо в кривых руках интригана (что более вероятно).

Вот такое "компилируется" без всяких проблем. Найдите отличия с вышеприведенным кодом.

typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
typedef void (*timer_callback_t)(uint8_t);
uint8_t timer_create(uint32_t, uint32_t, timer_callback_t);

Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Mar 2 2015, 06:41
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(CrimsonPig @ Mar 2 2015, 01:29) *
cranky.gif
Ошибка либо в невыразимо кривом компиляторе, либо в кривых руках интригана (что более вероятно).

Вот такое "компилируется" без всяких проблем. Найдите отличия с вышеприведенным кодом.

typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
typedef void (*timer_callback_t)(uint8_t);
uint8_t timer_create(uint32_t, uint32_t, timer_callback_t);


вижу разницу только в переопределении типов
typedef unsigned char uint8_t;
typedef unsigned int uint32_t;

что и без того нормально компилится со включенным stdint.h



Цитата(smalcom @ Mar 1 2015, 23:44) *
01.gif

компилятор написал, что вы не можете использовать типы объявленные через typedef в "форвардинге". только с объявлением тела функции.
ЕМНИП в таком случае получается двойная неизвестность - т.е. мало того что ф-ии нет, так ещё и типы пользовательские. как вариант попробуйте
другой стандарт (gnu++11 или c++11) или указать параметры функции.


т.е. он в таком виде не видит типы данных uint8_t ?

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Метценгерштейн   указатель на ф-ю   Mar 1 2015, 18:25
- - ViKo   А ошибку компилятора читающие должны угадать? Или ...   Mar 1 2015, 18:32
- - Xenia   На мой взгляд, подозрительным выглядит тип: timer_...   Mar 1 2015, 18:35
|- - CrimsonPig   Цитата(Метценгерштейн @ Mar 2 2015, 06:41...   Mar 2 2015, 09:26
- - smalcom   Цитатаспециально- для интриги- не стал ошибку комп...   Mar 1 2015, 20:44
- - smalcom   С сохранением интриги(без исходников) проблематичн...   Mar 2 2015, 09:35
- - Метценгерштейн   до дома доберусь, выложу исходники. Пока что вопро...   Mar 2 2015, 11:14
- - ViKo   Цитата(Метценгерштейн @ Mar 2 2015, 14:14...   Mar 2 2015, 11:24
|- - CrimsonPig   Цитата(ViKo @ Mar 2 2015, 11:24) По-моему...   Mar 2 2015, 11:46
- - SM   Цитата(Метценгерштейн @ Mar 2 2015, 14:14...   Mar 2 2015, 11:39
- - Метценгерштейн   Цитата(SM @ Mar 2 2015, 14:39) Можно. см....   Mar 2 2015, 12:14
- - SM   Цитата(Метценгерштейн @ Mar 2 2015, 15:14...   Mar 2 2015, 12:41


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 10:13
Рейтинг@Mail.ru


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