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