Как это вызывается, когда блок возвращает значение?

Недавно я наткнулся на этот код, который мне не кажется законным (но gcc его компилирует). Я не столько возражаю против конструкции, сколько хочу дать ей имя:

#define MAX(a,b) \
({ \
    typeof(a) _a = (a); \
    typeof(b) _b = (b); \
    (_a > _b) ? (_a) : (_b); \
})

Очевидно, значение последнего оператора возвращается как «значение» выражения, ограниченного пространством имен.

Edit: Спасибо за ответы, ребята. Оказывается, это расширение простого языка C, называемое выражениями операторов.

7
задан Matthew G. 1 December 2011 в 16:10
поделиться