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