楼 主
看上去不合法的语句,居然能编译并运行成功,结果正确!
发表于 2006-07-28 21:39 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
23年会员
UID 7105
性别 男
状态 离线
在 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;
注意!!! 上面的“逗号”(不是分号)!!!
第 2 楼
发表于 2006-07-29 04:01 · 中国 上海 虹口区 电信
高级用户
★★
积分 653
发帖 252
注册 2006-04-16 19:48
20年会员
UID 53939
状态 离线
逗号怎么啦?C/C++语法中,逗号分割的表达式从左向右求值,完整表达式的值是最右端子表达式的值。
函数调用和赋值都是合法表达式嘛

第 3 楼
发表于 2006-07-29 14:47 · 中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
20年会员
UID 42173
性别 男
状态 离线
逗号表达式
C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
第 4 楼
发表于 2006-07-29 22:51 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
23年会员
UID 7105
性别 男
状态 离线
论坛跳转: