C中是否允许用逗号分隔“算术表达式”,还是每个都需要单独的语句?

时间:2013-04-17 07:08:28

标签: c comma

在C中,是以下陈述

a+=3,b=c*2,d=a+b;

相当于以下语句块:

a+=3;
b=c*2;
d=a+b;

我相信你明白我的观点。我们可以安全地使用C中同一语句中用逗号分隔的多个数学表达式吗?在什么情况下这可能会造成问题?

2 个答案:

答案 0 :(得分:3)

如果您想到这样的逗号表达式列表可能会更容易:

((a += 3, b = c * 2), d = a + b)

首先评估最里面的逗号表达式:

a += 3, b = c * 2

该表达式将分两步进行评估:

a += 3
b = c * 2

a += 3的结果将被编译器抛弃,但是赋值仍然发生,只是返回的结果被丢弃了。第一个逗号表达式的结果是b(将c * 2(无论是什么))。

第一个逗号表达式的结果然后在下一个逗号表达式的左侧:

b = c * 2, d = a + b

然后将按顺序排序为

b = c * 2
d = a + b

表达式b = c * 2的结果被丢弃(但仍在评估时仍然会发生赋值),并且完整表达式的结果为da + b )。

整个表达式的结果将是d

答案 1 :(得分:1)

他们是一样的。

在C中,逗号运算符计算其左侧,忽略返回值(例如,返回x = y是新值),评估右侧并返回其结果(如果有)。使用逗号运算符是为了评估并获得左侧内容的副作用,而不使用(例如丢弃)其值。