现在的位置: 首页 > 综合 > 正文

语句表达式

2018年02月17日 ⁄ 综合 ⁄ 共 438字 ⁄ 字号 评论关闭

语句表达式(Statements and Declarations in Expressions)

用一对圆括号包含一个复合语句,在GNU C中称之为 语句表达式,比如以下语句:

     ({ int y = foo (); int z;
        if (y > 0) z = y;
        else z = - y;
        z; })


虽然看起来比较纠结,但在GNU C中这是合法的,这个 语句表达式 调用foo函数,然后计算其返回值的绝对值,整个表达式的值就是最右边的变量z的值。

在宏定义中这种 语句表达式 很有用,它能让宏的每个操作数只执行一次,例如:

     #define max(a,b) ((a) > (b) ? (a) : (b))

这是个有副作用的宏,因为在宏定义中a和b分别被执行了两次,当调用该宏函数而其中的参数具有自加自减作用时将会出现混乱。在GNU C中你可以用以下的 语句表达式 来化解这个难题:

     #define maxint(a,b)   ({int _a = (a), _b = (b); _a > _b ? _a : _b; })

【上篇】
【下篇】

抱歉!评论已关闭.