189 похожих чатов

Typedef void ( *pvMBFrameStart ) ( void

);

typedef void ( *pvMBFrameStop ) ( void );

typedef eMBErrorCode( *peMBFrameReceive ) ( UCHAR * pucRcvAddress,
UCHAR ** pucFrame,
USHORT * pusLength );

typedef eMBErrorCode( *peMBFrameSend ) ( UCHAR slaveAddress,
const UCHAR * pucFrame,
USHORT usLength );

typedef void( *pvMBFrameClose ) ( void );
я же правильно понимаю, что это указатели на ф-и которые будут вызывать вместо функций, которые им присвоили?

39 ответов

6 просмотров

Прототипы.

да, это описывают прототипы функций. Если ты обьявишь функции с таким типом и присвоишь указателю или сделаешь массив с ними. С можешь вызывать их

https://metanit.com/cpp/c/5.11.php

Евгений- Автор вопроса
Евгений- Автор вопроса
Leonid Zaliubovskyi
https://metanit.com/cpp/c/5.11.php

да я смотрю как сделан freemodbus, чтоб свой протокол наковырякать

Евгений
да я смотрю как сделан freemodbus, чтоб свой прото...

ну вот использую эти прототипы как тип, ты можешь в структуре объявить поле типа handler и ему присвоить

Leonid Zaliubovskyi
https://metanit.com/cpp/c/5.11.php

Стоп, Леонид не послал курить базовый функционал С. Это просто день хороший, или ему, как почтальону Печкину, велосипед подарили?)

Alexander
Ты про колбэки? )

это частный случай

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

ребенок спал хорошо 😀. ДА и вопрос адекватный, я скинул пример с описанием

Евгений- Автор вопроса
Leonid Zaliubovskyi
ребенок спал хорошо 😀. ДА и вопрос адекватный, я с...

значит надо пользоваться по максимуму) Про колбэки еще вопрос будет, а то видел, знаю, применял, но далеко не уходил

Евгений
значит надо пользоваться по максимуму) Про колбэки...

Вообще дико полезный функционал. В ядре линухи повсеместно используется.

Евгений- Автор вопроса
Kom
Вообще дико полезный функционал. В ядре линухи пов...

я понимаю, что грубо говоря это как флаг, выставился и сработало нет флага - не сработало Можно лишних флагов не городить

Евгений
я понимаю, что грубо говоря это как флаг, выставил...

Не совсем так. Ты можешь на одно и то же событие назначать разные обработчики. Ну и да, проверку на NULL никто не отменял)

Евгений- Автор вопроса
Kom
Не совсем так. Ты можешь на одно и то же событие н...

то что функция себя на ноль не поделила (условно)

Евгений
я понимаю, что грубо говоря это как флаг, выставил...

не-а, не так. Флаг ты для пролверки проверяешь и переходишь куда тебе нужно

Евгений
а колбэк обратный вызов же

молодец! Возьми пирожок с полки, протри и положи обратно :)

Евгений- Автор вопроса
Leonid Zaliubovskyi
молодец! Возьми пирожок с полки, протри и положи о...

я просто разницу не понимаю между ними в каком-то плане, отличие между ними то какое. Функционал для меня похож

Евгений
то что функция себя на ноль не поделила (условно)

Что указатель на хэндлер не присвоен. Т.е. переходить некуда.

Евгений
я просто разницу не понимаю между ними в каком-то ...

ты перевел дословно. Но по своей сути - это указатель, которому присваивают указатель на функцию и по наступлению события внутри кода происходит что то типа pointer_to_func(); если есть параметры - внутрь они передаются

Евгений- Автор вопроса
Leonid Zaliubovskyi
ты перевел дословно. Но по своей сути - это указат...

То же самое, что функцию дернуть внутри кода, хотя дублирование кода будет, а здесь функция как параметр

Евгений
То же самое, что функцию дернуть внутри кода, хотя...

ты внутрь можешь передать функцию или на лету поменять на нужную тебе. Или обработчики команд делать хорошо. Вот пришел тебе код 1 ты взял из массива указателей на функцию элемент 1 - выполнил. Пришел 5 - выполнил. И нет никаких свитчкейсов и код проще и приятнее

Евгений
То же самое, что функцию дернуть внутри кода, хотя...

Дублирование будет только в случае с inline функцией.

Kom
Дублирование будет только в случае с inline функци...

Пан не путает ли с инлайн? Леонид не понял о каком дублировании кода идет речь

Leonid Zaliubovskyi
Пан не путает ли с инлайн? Леонид не понял о каком...

Не буду больше писать в чат, пока в код смотрю, чревато)

Евгений- Автор вопроса
Kom
Дублирование будет только в случае с inline функци...

ну я в том плане, что fo1(symma,2,3) fo1 ((int (*op)(int, int),a,b) { return op(a,b); } fo2(a,b) { return symma(a,b); } symma(int a,int b) { return a+b }

Евгений
ну я в том плане, что fo1(symma,2,3) fo1 ((int ...

чет наркоманией попахивает, если честно

Евгений- Автор вопроса
Leonid Zaliubovskyi
чет наркоманией попахивает, если честно

Колбэки нужны же чтоб упростить некоторые функеции и не делать дублирование кода?

Евгений
Колбэки нужны же чтоб упростить некоторые функеции...

Коллбэки нужны, чтобы делать динамическое присваивание обработчиков

Евгений- Автор вопроса
Kom
Коллбэки нужны, чтобы делать динамическое присваив...

надо найти себе пример разжеванный а то неполное понимание

Евгений
То же самое, что функцию дернуть внутри кода, хотя...

Если в 2х словах : у тебя где то определена функция foo, пусть это выглядит как uint16_t foo(uint8_t a, uint8_t b) { return a+b; } это значит что код этой функции помещается где то в памяти, а переменная foo хранит АДРЕС, где этот код лежит, и когда ты где то в коде пишешь foo(3,4); то в стек помещаются параметры 3 и 4 и далее идет ПЕРЕХОД к исполнению кода по адресу, находящемуся в переменной foo далее уже код функции foo извлекает переданные ей параметры из стека, производит над ними операцию сложения, результат помещает обратно в стек и делает ОБРАТНЫЙ переход к месту, откуда она была вызвана.

Александр Баракин
Если в 2х словах : у тебя где то определена функци...

Не всегда на стек. Зависит от соглашения вызовов. В арме например первые четыре будут а регистрах при вызове. Если их ширина до 32 бит. Или первые два, если пот64 бита... Вообщем есть штука как соглашение о вызовах, полезно почитать чтобы понимать что под капотом делается и чего не стоит делать Хотя бы это. https://en.m.wikipedia.org/wiki/Calling_convention Но я бы рекомендовал полностью его прочесть

Leonid Zaliubovskyi
Не всегда на стек. Зависит от соглашения вызовов. ...

это да, но поэтому я и написал "в двух словах". Потом уже в процессе углубления человек уже почитает про соглашение о вызовах)

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Если подытожить: По мнению Розыча и Хемуля и др. - предпочтительно по возможности объявлять в секции имплементации потому-что: 1) Выше скорость компиляции 2) Не замусоривается...
notme
7
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
В дельфе нет никакого коробочного (без установки третьих либ) способа получить CallStack с расшифровкой отладочных символов?
notme
7
Приветики всем!)) Подскажите: есть функция, которая записывает число типа Cardinal в четыре байта, хранимые в TBytes. Можете помочь мне, показав, как должна выглядеть функци...
Моринаро
5
Карта сайта