http://en.wikipedia.org/wiki/C_preprocessor#Multiple_evaluation_of_side_effectsを読みながら、私はこの例に出くわした:Cブロックは式になります:({int a = 1; int b = 2; a + b;})は3に等しくなります
\#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; }) // WHY DOES THIS LINE WORK?
あなたはすなわちmax(1,2)
、まさに関数のように使用することができ、どの2に評価される式が
私の質問があり、どのよう({ statment-list last-expression; })
構築物がありませんさ最後の式の値を評価しますか?具体的に、どのようなこの構造の解析ツリーが見えますか?私は{ }
は常に複合文を意味考え、およびステートメントは値を持ちません。私はのCの文法の周り掘ってみました、まだこの問題を見つけ出すことができませんでした。
'42;'も同様です:-) – paxdiablo
ああ、私は、OPは「42;」がスタンダードCのステートメントであるためステートメントであると知っていると思っています。しかし、標準Cではそうではありません。 –