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 ответов

36 просмотров

Прототипы.

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

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
Не всегда на стек. Зависит от соглашения вызовов. ...

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта