GNU C把包含在括号中的复合语句看作是一个表达式。这样就允许你在表达式中使用循环、switch
语句以及局部变量。
让我们回忆一下,复合语句是用大括号括起来的一组表达式,在这种构造之下,大括号外面要有一对圆括号。例如:
({ int y = foo (); int z;
if (y > 0) z = y;
else z = - y;
z; })
|
就是一个合法的求foo()
的绝对值的表达式(虽然比必要的复杂一点)。
复合语句的最后必须是一个以分号结尾的语句;而这个子语句的值将会被当成整个表达式的值。在这里,如果你使用了其它一些用大括号括起来的语句,由于这个语句的返回值为空,所以实际上整个语句值为空。