浏览 Linux 内核源代码,我发现了一段代码,其中用括号括起来的语句块被视为表达式a la lisp(或 ML),即值为最后一条语句的值的表达式。
例如:
int a = ({
int i;
int t = 1;
for (i = 2; i<5; i++) {
t*=i;
}
t;
});
我一直在研究ANSI C 语法,试图弄清楚这段代码如何适合解析树,但我没有成功。
那么,有人知道这种行为是标准规定的还是只是 GCC 的特性?
更新:我已经尝试使用标志 -pedantic 并且编译器现在给了我一个警告:
warning: ISO C forbids braced-groups within expressions