在 C 中,是以下语句
a+=3,b=c*2,d=a+b;
相当于以下语句块:
a+=3;
b=c*2;
d=a+b;
我相信你明白我的意思。我们可以在 C 中的同一语句中安全地使用多个用逗号分隔的数学表达式吗?在什么情况下这会造成问题?
如果您像这样考虑呈现的逗号表达式列表,可能会更容易:
((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
。
他们是一样的。
在 C 中,逗号运算符计算其左侧,忽略返回值(例如 x = y 的返回是新值),计算右侧并返回其结果(如果有)。逗号运算符的使用是评估和获取左侧内容的副作用,而不使用(例如丢弃)其值。