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

 
 
 
Reply to this topicStart new topic
> Указатель на функцию
Danis
сообщение May 30 2011, 06:35
Сообщение #1


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



При переносе кода виртуального порта (USB-COM) от ST, столкнулся с такой конструкцией:

uint8_t *(*CopyRoutine)(uint16_t);

Немного пришлось скорректировать код, поскольку у меня проект на С++, NULL заменил на 0. В принципе все работает. Но так толком и не смог назвать CopyRoutine, ну если бы не было левой звездочки, был бы указатель на функцию, а так пока не встречал в своей практике такую конструкцию. Вообщем как ”оно”(CopyRoutine) называется?

Вырезка и листинга:

RESULT Virtual_Com_Port_Data_Setup(uint8_t RequestNo)
{
uint8_t *(*CopyRoutine)(uint16_t);

CopyRoutine = NULL;

……..

NULL определен так:
#define NULL ((void *)0)


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 30 2011, 06:40
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Danis @ May 30 2011, 09:35) *
как ”оно”(CopyRoutine) называется?

Оно называется указателем на функцию, плучающую uint16_t и возвращающую указатель на uint8_t.

PS
Вынес из темы об STM32.
Danis, уж не для того ли Вы создавали тему в шапке раздела ARM, чтобы валить туда всё подряд? (можно не отвечать)
Go to the top of the page
 
+Quote Post
scifi
сообщение May 30 2011, 07:20
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Danis @ May 30 2011, 10:35) *
ну если бы не было левой звездочки, был бы указатель на функцию, а так пока не встречал в своей практике такую конструкцию.

Левая звёздочка относится к типу возвращаемого значения. Получается указатель на функцию, возвращающую указатель на uint8_t.
Go to the top of the page
 
+Quote Post
Danis
сообщение May 30 2011, 07:41
Сообщение #4


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(IgorKossak @ May 30 2011, 09:40) *
Оно называется указателем на функцию, плучающую uint16_t и возвращающую указатель на uint8_t.

Точно, точно. По детски лопухнулся, спасибо!
С замечанием согласен.



--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 30 2011, 07:53
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



чтобы не морочить голову я использую typedef, чего и Вам желаю.
Код
typedef uint8_t* (*copy_func_t)(uint16_t); // объявление типа указатель на функцию
...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Idle
сообщение May 31 2011, 18:22
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



чтобы не морочить голову ни себе и ни людям, typedef не использую и тебе не советую
http://lxr.linux.no/#linux+v2.6.39/Documen...odingStyle#L277
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 1 2011, 04:45
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Это очень индивидуально.
И с данным утверждением (вернее с рекомендацией) можно как соглашаться так и нет.
Лично мне гораздо удобнее и понятнее читать код где присутствует как можно меньше лишных буковок, typedef в этом плане абсолютно безопасен и стандартен.
После продолжительного опыта программирования на объектных языках программирования проникаешься идеологией типов разных сущностный.
И это очень хорошо на мой взгляд. Я действительно при программировании на С придерживаюсь linux-CodingStyle, но не слепо и огульно...
Это сродни подмеченному нами в одном из обсуждений моменту - невозможно научиться грамотно писать на асме не поняв суть процедурного языка программирования.
И тут я хочу провести красной нитью мысль о невозможности хорошо программировать на С не понимая принципов объектно-ориентированного программирования.
И так фактически во всём. Сейчас много псевдо-программистов, которые окромя одной технологии или фреймворка ничего не видели и не знают. И мы с Вами наблюдаем огромное количество кода никакого качества, даже от именитых вендеров. К чему это я всё? Да к тому что нужно своей головой больше думать и не принимать за чистую монету всё то новое, что увидел, узнал или прочитал.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
beaRTS
сообщение Apr 5 2013, 14:46
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111



Здравствуйте!
Хочу оживить дискуссию.
Подскажите как это в теории называется !!!

typedef void QEMUResetHandler(void *opaque);

void qemu_register_reset(QEMUResetHandler *func, void *opaque);
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque);



--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
Go to the top of the page
 
+Quote Post
ARV
сообщение Apr 5 2013, 16:18
Сообщение #9


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(demiurg_spb @ Jun 1 2011, 08:45) *
И мы с Вами наблюдаем огромное количество кода никакого качества, даже от именитых вендеров. К чему это я всё? Да к тому что нужно своей головой больше думать и не принимать за чистую монету всё то новое, что увидел, узнал или прочитал.
bb-offtopic.gif а с моими размышлениями как спорили... ужас! sm.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Apr 8 2013, 05:00
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
Подскажите как это в теории называется !!!

callback
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 8 2013, 06:05
Сообщение #11


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(andrewlekar @ Apr 8 2013, 09:00) *
callback
Или по-русски обратный вызов.
Типичное применение - это функция-обработчик некого события на которое нужно как-то реагировать (иногда по-разному).
И, если этот обратный вызов зарегистрирован (указатель отличен от NULL), то он срабатывает иначе игнорируется.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:10
Рейтинг@Mail.ru


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