Я заметил, что иногда макросы C пишутся примерно так:
#define foo(bar) ({ ++bar; })
После некоторых экспериментов я обнаружил, что:
({});
будет компилироваться, но ничего не делать. (Как и ожидалось.)
- Если вы выключите
;
, это приведет к синтаксической ошибке. Побочным эффектом этого является обеспечение того, что foo () выглядит как функция в вашем коде. (Хотя, если вы оставите точку с запятой выключенной, ошибка не очень полезна для диагностики проблемы!)
return ({});
жалуется на то, что значение void не игнорируется, как если бы я пытался использовать функцию void.
Это просто для того, чтобы разработчики добавили точку с запятой в свои макросы или это имеет другую цель? Я пробовал Google, но он с треском проваливается. Есть ли имя для этого?