Недавно я наткнулся на этот код, который мне не кажется законным (но gcc его компилирует). Я не столько возражаю против конструкции, сколько хочу дать ей имя:
#define MAX(a,b) \
({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
(_a > _b) ? (_a) : (_b); \
})
Очевидно, значение последнего оператора возвращается как «значение» выражения, ограниченного пространством имен.
Edit: Спасибо за ответы, ребята. Оказывается, это расширение простого языка C, называемое выражениями операторов.