Смотрю исходники STM32 HAL. Вижу следующее:
#define __HAL_RCC_GPIOC_CLK_ENABLE() do { \
__IO uint32_t tmpreg = 0x00U; \
SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);\
/* Delay after an RCC peripheral clock enabling */ \
tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);\
UNUSED(tmpreg); \
} while(0U)
зачем здесь нужен do/while цикл? Выполняется он всегда ровно 1 раз, т.к. постусловие всегда ложно. Правильно ли я понимаю, что это нужно только для того, чтобы определить внутри цикла переменную tmpreg
так, чтобы область ее видимости была в этом самом цикле и название переменной не конфликтовало с названиями внутри функции, которая вызывает макрос?