【发布时间】:2012-02-14 11:04:30
【问题描述】:
下面的两个代码片段是否完全相同?
do
{
Delay_us(1);
status = fetchStatus();
}while(!status);
第二个片段->
do
{
Delay_us(1);
}while(status = fetchStatus(), !status);
哪个更好?
【问题讨论】:
-
第二个太可怕了。第一个的替代方案实际上是
while (!(status = fetchStatus())。 -
第二个合法吗?循环的条件不需要是有效的表达式吗?这甚至会评估到什么?
-
@prelic:(据我所知)这是一个晦涩难懂的功能,使用时会引起混淆:en.wikipedia.org/wiki/Comma_operator
-
@prelic:有效。逗号分隔的表达式按从左到右的顺序计算,并具有最右边表达式的值。
-
@BhaskarUpadhyayula:它们在各方面都是等价的,即使在存在多线程和可重入的情况下;逗号运算符引入了一个序列点。
标签: c while-loop conditional-statements pic