Board logo

标题: 看上去不合法的语句,居然能编译并运行成功,结果正确! [打印本页]

作者: GOTOmsdos     时间: 2006-7-28 21:39    标题: 看上去不合法的语句,居然能编译并运行成功,结果正确!

在 GNU 的GZIP 的源码,在TC2上,编译通过

#define FLUSH_BLOCK(eof) \
   flush_block(block_start >= 0L ? (char*)&window[(unsigned)block_start] : \
                (char*)NULL, (long)strstart - block_start, (eof))

有了上面的宏定义,后面就有如下的感觉违反规定的语句!
if (flush) FLUSH_BLOCK(0), block_start = strstart;

注意!!! 上面的“逗号”(不是分号)!!!
作者: asbai     时间: 2006-7-29 04:01
逗号怎么啦?C/C++语法中,逗号分割的表达式从左向右求值,完整表达式的值是最右端子表达式的值。

函数调用和赋值都是合法表达式嘛


作者: electronixtar     时间: 2006-7-29 14:47
逗号表达式
作者: GOTOmsdos     时间: 2006-7-29 22:51
是,逗号表达式
复习了