中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-01 21:04
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行
DOS开发编程 & 发展交流 (开发室) » 看上去不合法的语句,居然能编译并运行成功,结果正确!
可打印版本  1,564 / 3
第1楼 GOTOmsdos 发表于 2006-07-28 21:39
铂金会员 发帖 1,827 积分 5,154
看上去不合法的语句,居然能编译并运行成功,结果正确!
在 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楼 asbai 发表于 2006-07-29 04:01
高级用户 发帖 252 积分 653
逗号怎么啦?C/C++语法中,逗号分割的表达式从左向右求值,完整表达式的值是最右端子表达式的值。

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

第3楼 electronixtar 发表于 2006-07-29 14:47
铂金会员 发帖 2,672 积分 7,493
逗号表达式
第4楼 GOTOmsdos 发表于 2006-07-29 22:51
铂金会员 发帖 1,827 积分 5,154
是,逗号表达式
复习了
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023