瀏覽Linux內核源我發現some piece of code其中由括號包圍的語句塊被視爲表達一拉口齒不清(或ML),即,該值是最後語句的值的表達式。ANSI C中parens表達式包圍的複合語句(塊)?
例如:
int a = ({
int i;
int t = 1;
for (i = 2; i<5; i++) {
t*=i;
}
t;
});
我一直在尋找的ANSI C grammar試圖找出如何這段代碼將適合解析樹,但我都沒有成功。
那麼,有沒有人知道這種行爲是由標準強制還是僅僅是GCC的特性?
更新:我試過用標誌-pedantic和編譯器現在給我一個警告:
warning: ISO C forbids braced-groups within expressions
通過在左括號之前放置__extension__,可以抑制GCC中的警告。 – Flimm 2014-09-25 14:42:10