Часто в макросах вы увидите, что люди используют do {.. .} while (0)
, чтобы проглотить точку с запятой. Я только что наткнулся на пример, где вместо этого используется ({...})
, и кажется, что он не только проглатывает точку с запятой, но и позволяет вам возвращать значение:
#define NEW_MACRO() ({ int x = 1; int y = 2; x+y; })
if(1)
val = NEW_MACRO();
else
printf("this never prints");`
val
получится 3. Я не могу найти по нему никакой документации, поэтому я немного опасаюсь этого. Есть какие-нибудь ошибки? s этим методом?