标题: 看上去不合法的语句,居然能编译并运行成功,结果正确!
[打印本页]
作者: 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
是,逗号表达式
复习了