Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Указатель на функцию
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Danis
При переносе кода виртуального порта (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)
IgorKossak
Цитата(Danis @ May 30 2011, 09:35) *
как ”оно”(CopyRoutine) называется?

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

PS
Вынес из темы об STM32.
Danis, уж не для того ли Вы создавали тему в шапке раздела ARM, чтобы валить туда всё подряд? (можно не отвечать)
scifi
Цитата(Danis @ May 30 2011, 10:35) *
ну если бы не было левой звездочки, был бы указатель на функцию, а так пока не встречал в своей практике такую конструкцию.

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

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

demiurg_spb
чтобы не морочить голову я использую typedef, чего и Вам желаю.
Код
typedef uint8_t* (*copy_func_t)(uint16_t); // объявление типа указатель на функцию
...
Idle
чтобы не морочить голову ни себе и ни людям, typedef не использую и тебе не советую
http://lxr.linux.no/#linux+v2.6.39/Documen...odingStyle#L277
demiurg_spb
Это очень индивидуально.
И с данным утверждением (вернее с рекомендацией) можно как соглашаться так и нет.
Лично мне гораздо удобнее и понятнее читать код где присутствует как можно меньше лишных буковок, typedef в этом плане абсолютно безопасен и стандартен.
После продолжительного опыта программирования на объектных языках программирования проникаешься идеологией типов разных сущностный.
И это очень хорошо на мой взгляд. Я действительно при программировании на С придерживаюсь linux-CodingStyle, но не слепо и огульно...
Это сродни подмеченному нами в одном из обсуждений моменту - невозможно научиться грамотно писать на асме не поняв суть процедурного языка программирования.
И тут я хочу провести красной нитью мысль о невозможности хорошо программировать на С не понимая принципов объектно-ориентированного программирования.
И так фактически во всём. Сейчас много псевдо-программистов, которые окромя одной технологии или фреймворка ничего не видели и не знают. И мы с Вами наблюдаем огромное количество кода никакого качества, даже от именитых вендеров. К чему это я всё? Да к тому что нужно своей головой больше думать и не принимать за чистую монету всё то новое, что увидел, узнал или прочитал.
beaRTS
Здравствуйте!
Хочу оживить дискуссию.
Подскажите как это в теории называется !!!

typedef void QEMUResetHandler(void *opaque);

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

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

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