3

在 C 中,是以下语句

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

相当于以下语句块:

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

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

4

2 回答 2

3

如果您像这样考虑呈现的逗号表达式列表,可能会更容易:

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

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

a += 3, b = c * 2

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

a += 3
b = c * 2

的结果a += 3会被编译器扔掉,但赋值还是会发生,只是返回的结果被扔掉了。第一个逗号表达式的结果是b(which will be c * 2(whatever that is))。

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

b = c * 2, d = a + b

然后将其排序为

b = c * 2
d = a + b

表达式的结果b = c * 2被丢弃(但由于它仍在评估,赋值仍然发生),完整表达式的结果是d(即a + b)。

整个表达式的结果将是d

于 2013-04-17T07:30:02.137 回答
1

他们是一样的。

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

于 2013-04-17T07:09:57.900 回答