在閱讀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; })
是如何構造的評估爲last-expression的值?具體來說,這個結構的解析樹是什麼樣的?我認爲{ }
總是表示複合語句,而語句沒有值。我嘗試用 C語法進行挖掘,仍然無法解決這個問題。
'42;'也是一個聲明:-) – paxdiablo
啊,但我懷疑OP知道'42;'是一個語句,因爲它是標準C語句。語句表達式是不是在標準C中,但是。 –