关于c语言中逗号表达式

netxuning 2006-12-16 04:03:15
看到有些代码中喜欢用逗号表达式:
如:
if (dlrate < 1024.0)
*units = 0;
else if (dlrate < 1024.0 * 1024.0)
*units = 1, dlrate /= 1024.0;
else if (dlrate < 1024.0 * 1024.0 * 1024.0)
*units = 2, dlrate /= (1024.0 * 1024.0);
else
/* Maybe someone will need this, one day. */
*units = 3, dlrate /= (1024.0 * 1024.0 * 1024.0);

请问这么用逗号表达式的意义是什么?
...全文
524 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GaoXX 2006-12-16
  • 打赏
  • 举报
回复
JS里也有
jixingzhong 2006-12-16
  • 打赏
  • 举报
回复
逗号表达式,
顺序执行各个 子语句,
整个表达式的值取决于最后一个语句。

事实上,
*units = 3, dlrate /= (1024.0 * 1024.0 * 1024.0);
这样的语句就和
*units = 3;
dlrate /= (1024.0 * 1024.0 * 1024.0);
是一样的。

问题是 if语句的有效范围是 一个语句,
而使用逗号表达式的话,
*units = 3, dlrate /= (1024.0 * 1024.0 * 1024.0);
整体是一个语句,否则需要使用大括号。
yisea123 2006-12-16
  • 打赏
  • 举报
回复
正如楼上说的

另外只要知道 逗号表达式是 左结合
比如这样一个语句

d=(a=1,b=a+1,a++);

这个语句等价与
a=1;
b=a+1;
a++;


最后d=2,也就是逗号表达式的值是从左到右算,最后一个式子a++的返回值
jixingzhong 2006-12-16
  • 打赏
  • 举报
回复
逗号运算符

  C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。

  其一般形式为: 表达式1,表达式2 其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。

void main(){
 int a=2,b=4,c=6,x,y;
 y=(x=a+b),(b+c);
 printf("y=%d,x=%d",y,x);
}
a<--2,b<--4,c<--6,x<--0,y<--0
x<--a+b,y<---b+c

  本例中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。对于逗号表达式还要说明两点:

  1.逗号表达式一般形式中的表达式1和表达式2 也可以又是逗号表达式。例如: 表达式1,(表达式2,表达式3) 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式: 表达式1,表达式2,…表达式n 整个逗号表达式的值等于表达式n的值。

  2.程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。

  3.并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。
晨星 2006-12-16
  • 打赏
  • 举报
回复
没啥大的意思,逗号表达式无非是从左向右求值,最后整个逗号表达式的值是最后一个子表达式的值。
我见过的用逗号表达式的大多是为了写程序的方便。比如,你举的这个例子中,由于if或else后是由单个逗号表达式构成的单条语句,就不用大括号括起来了。
否则,比如如果把逗号表达式“*units = 1, dlrate /= 1024.0;”构成的语句用分号拆成独立的两条语句,那么那个地方要用大括号把两条语句括起来。

当然,你可以认为这种风格不好,我也并没有说它很好,只是想解释一下为什么。
cjq87 2006-12-16
  • 打赏
  • 举报
回复
在这里和用两条语句是等价的

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧