Подтвердить что ты не робот

Преимущества do {} while (0) против ({}) в макросе?

Есть много вопросов о переполнении стека относительно использования do { ... } while(0) в макросах, но это немного отличается. Я понимаю, почему do { ... } while(0) используется для переноса нескольких строк кода при расширении макроса. Но есть другая форма, которую я часто вижу: ({ ... }).

Форма ({ }) имеет то преимущество, что она является выражением и может иметь "возвращаемое значение". Он также (субъективно) читается лучше, чем do { } while(0). Так почему же он не всегда используется? Какое преимущество заключается в использовании do { } while(0) в макросе вместо?

4b9b3361