最近,我發現這個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)什麼是這樣做的首選方式?
可能成爲一個受保護的問題!許多C(和C++,我相信)程序員不知道'({...})'是GCC擴展,而不是C語言的一部分。恕我直言。 – Jack