Перейти к содержанию
    

Указатель на функцию

При переносе кода виртуального порта (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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как ”оно”(CopyRoutine) называется?

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

 

PS

Вынес из темы об STM32.

Danis, уж не для того ли Вы создавали тему в шапке раздела ARM, чтобы валить туда всё подряд? (можно не отвечать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну если бы не было левой звездочки, был бы указатель на функцию, а так пока не встречал в своей практике такую конструкцию.

Левая звёздочка относится к типу возвращаемого значения. Получается указатель на функцию, возвращающую указатель на uint8_t.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

С замечанием согласен.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чтобы не морочить голову я использую typedef, чего и Вам желаю.

typedef uint8_t* (*copy_func_t)(uint16_t); // объявление типа указатель на функцию
...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чтобы не морочить голову ни себе и ни людям, typedef не использую и тебе не советую

http://lxr.linux.no/#linux+v2.6.39/Documen...odingStyle#L277

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это очень индивидуально.

И с данным утверждением (вернее с рекомендацией) можно как соглашаться так и нет.

Лично мне гораздо удобнее и понятнее читать код где присутствует как можно меньше лишных буковок, typedef в этом плане абсолютно безопасен и стандартен.

После продолжительного опыта программирования на объектных языках программирования проникаешься идеологией типов разных сущностный.

И это очень хорошо на мой взгляд. Я действительно при программировании на С придерживаюсь linux-CodingStyle, но не слепо и огульно...

Это сродни подмеченному нами в одном из обсуждений моменту - невозможно научиться грамотно писать на асме не поняв суть процедурного языка программирования.

И тут я хочу провести красной нитью мысль о невозможности хорошо программировать на С не понимая принципов объектно-ориентированного программирования.

И так фактически во всём. Сейчас много псевдо-программистов, которые окромя одной технологии или фреймворка ничего не видели и не знают. И мы с Вами наблюдаем огромное количество кода никакого качества, даже от именитых вендеров. К чему это я всё? Да к тому что нужно своей головой больше думать и не принимать за чистую монету всё то новое, что увидел, узнал или прочитал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

Хочу оживить дискуссию.

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

 

typedef void QEMUResetHandler(void *opaque);

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И мы с Вами наблюдаем огромное количество кода никакого качества, даже от именитых вендеров. К чему это я всё? Да к тому что нужно своей головой больше думать и не принимать за чистую монету всё то новое, что увидел, узнал или прочитал.
:bb-offtopic: а с моими размышлениями как спорили... ужас! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

callback
Или по-русски обратный вызов.

Типичное применение - это функция-обработчик некого события на которое нужно как-то реагировать (иногда по-разному).

И, если этот обратный вызов зарегистрирован (указатель отличен от NULL), то он срабатывает иначе игнорируется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...