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

Что за __HANDLE__ ?

Встретился тут мне в одном проекте под STM32 код под Кейл. 

 #define __HAL_LOCK1(__HANDLE__)                                           \
                                                                       \
                                    while((__HANDLE__)->Lock == HAL_LOCKED)   \
                                    {                                      \
                                                        \
                                    }                                      \
                                                                      \
                                    {                                      \
                                       (__HANDLE__)->Lock = HAL_LOCKED;    \
                                    }                                      \

 

Никто не подскажет, __HANDLE__ там что-то значит или это обычный параметр #define , но создатель решил так вы....ся с названием?

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


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

1 час назад, artemkad сказал:

но создатель решил так вы....ся с названием?

А как он, по-вашему, должен был назвать указатель на блокируемую сущность?

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


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

5 часов назад, Сергей Борщ сказал:

А как он, по-вашему, должен был назвать указатель на блокируемую сущность?

Ну, я привык что с двух подчеркиваний начинаются слова зарезервированные компилятором. Вот и закралась мысль "а вдруг"....

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


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

Неоднозначность есть, но она в данном случае не сработала бы, даже если там был бы, например, __LINE__.

Но стиль, ИМХО, конечно, ужасный. Раздуть столько строк кода на ровном месте... нужно постараться

#define __HAL_LOCK1(hnd) do {                                \
                           while((hnd)->LOCK == HAL_LOCKED); \
                           (hnd)->LOCK = HAL_LOCKED;         \
                         }while(0)

но можно было и в одну строку (правда не очень читаемо получается).

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


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

7 часов назад, artemkad сказал:

я привык что с двух подчеркиваний начинаются слова зарезервированные компилятором

Согласен, не подумал.

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


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

1 hour ago, Arlleex said:

можно было и в одну строку

Макрос совершенно неоднозначный все равно: по названию он должен просто делать

(hnd)->LOCK = HAL_LOCKED; 

без ожидания разблокировки.

Лучше было бы как с мьютексами: или ты проверяешь, заблокирован ли он, или пытаешься блокировать (и если заблокирован, возвращаешь ошибку). А тут - черт знает что!

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


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

7 hours ago, artemkad said:

Ну, я привык что с двух подчеркиваний начинаются слова зарезервированные компилятором. Вот и закралась мысль "а вдруг"....

Вы правильно привыкли.
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

Раздел 7.1.3

В данном случае оно работает случайно. Т.е. повезло, что __HANDLE__ не используется для имлементации языка С (компилятора или стандартной библиотеки)

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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