私は最近、この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