Используется нестандартное расширение GCC, чтобы разрешить возврат значений из блоков кода, в основном предназначенных для макросов. Последнее значение внутри блока кода обрабатывается как «возвращаемое значение».
Ярким примером того, почему это было необходимо, является обычный макрос max
:
#define max(a,b) (a)<(b)?(b):(a)
Вызов max(new A(), new B())
приводит к выделению 3 объектов, тогда как на самом деле вы хотите только 2 (надуманный пример, но суть , один из операндов оценивается дважды ).
С этим расширением вы можете вместо этого написать:
#define max(a,b) ({ typeof(a) _a=(a); typeof(b) _b=(b); _a<_b?_b:_a; })
В этом случае оба операнда вычисляются ровно один раз, точно так же, как функция, но со всеми преимуществами макросов (какими они являются).