artemkad 88 13 декабря, 2021 Опубликовано 13 декабря, 2021 · Жалоба Встретился тут мне в одном проекте под STM32 код под Кейл. #define __HAL_LOCK1(__HANDLE__) \ \ while((__HANDLE__)->Lock == HAL_LOCKED) \ { \ \ } \ \ { \ (__HANDLE__)->Lock = HAL_LOCKED; \ } \ Никто не подскажет, __HANDLE__ там что-то значит или это обычный параметр #define , но создатель решил так вы....ся с названием? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 13 декабря, 2021 Опубликовано 13 декабря, 2021 · Жалоба 1 час назад, artemkad сказал: но создатель решил так вы....ся с названием? А как он, по-вашему, должен был назвать указатель на блокируемую сущность? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 88 14 декабря, 2021 Опубликовано 14 декабря, 2021 · Жалоба 5 часов назад, Сергей Борщ сказал: А как он, по-вашему, должен был назвать указатель на блокируемую сущность? Ну, я привык что с двух подчеркиваний начинаются слова зарезервированные компилятором. Вот и закралась мысль "а вдруг".... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 184 14 декабря, 2021 Опубликовано 14 декабря, 2021 · Жалоба Неоднозначность есть, но она в данном случае не сработала бы, даже если там был бы, например, __LINE__. Но стиль, ИМХО, конечно, ужасный. Раздуть столько строк кода на ровном месте... нужно постараться #define __HAL_LOCK1(hnd) do { \ while((hnd)->LOCK == HAL_LOCKED); \ (hnd)->LOCK = HAL_LOCKED; \ }while(0) но можно было и в одну строку (правда не очень читаемо получается). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 14 декабря, 2021 Опубликовано 14 декабря, 2021 · Жалоба 7 часов назад, artemkad сказал: я привык что с двух подчеркиваний начинаются слова зарезервированные компилятором Согласен, не подумал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 14 декабря, 2021 Опубликовано 14 декабря, 2021 · Жалоба 1 hour ago, Arlleex said: можно было и в одну строку Макрос совершенно неоднозначный все равно: по названию он должен просто делать (hnd)->LOCK = HAL_LOCKED; без ожидания разблокировки. Лучше было бы как с мьютексами: или ты проверяешь, заблокирован ли он, или пытаешься блокировать (и если заблокирован, возвращаешь ошибку). А тут - черт знает что! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 14 декабря, 2021 Опубликовано 14 декабря, 2021 · Жалоба 7 hours ago, artemkad said: Ну, я привык что с двух подчеркиваний начинаются слова зарезервированные компилятором. Вот и закралась мысль "а вдруг".... Вы правильно привыкли.http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf Раздел 7.1.3 В данном случае оно работает случайно. Т.е. повезло, что __HANDLE__ не используется для имлементации языка С (компилятора или стандартной библиотеки) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться