Недавно я нашел этот макрос GCC:
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
Я не понял, прежде чем увидел этот код, что блок кода {...}
может каким-то образом вернуть значение в C.
1) Не могли бы вы дать мне подсказку, как это работает?
Хотя я обычно мог добиться такого же результата, злоупотребляя оператором запятой:
#define max(a,b) \
(typeof (a) _a = (a), \
typeof (b) _b = (b), \
(_a > _b ? _a : _b))
или если бы это было только для побочного эффекта, я использовал бы do { ... } while(0)
2) Каков предпочтительный способ сделать это?