Linuxカーネルソースを閲覧すると、括弧で囲まれたステートメントのブロックが式a la lisp(またはML)、つまり最後のステートメントの値である式として扱われるコードが見つかりました。
例えば:
int a = ({
int i;
int t = 1;
for (i = 2; i<5; i++) {
t*=i;
}
t;
});
このコードが解析ツリーにどのように適合するかを理解しようとしてANSIC文法を調べてきましたが、成功していません。
それで、この振る舞いが標準によって義務付けられているのか、それとも単にGCCの特性なのかを誰かが知っていますか?
更新:フラグ-pedanticを試してみましたが、コンパイラーから警告が表示されるようになりました。
warning: ISO C forbids braced-groups within expressions