用逗号分隔的for循环内从左到右的语句求值



这两个代码是一样的吗?for循环中的这些语句写在同一行,用逗号分隔。它们会从左到右求值吗?

我还想问,我可以使用尽可能多的语句内的for循环用逗号分隔。比如(i=0, j=0, k=0;.......) ?

for(i=0, j= strlen(s)-1; i<j; i++, j--){ 
     c=s[i];
     s[i]=s[j];
     s[j]=c;
}

for(i=0, j= strlen(s)-1; i<j; i++, j--)
      c=s[i],s[i]=s[j],s[j]=c;

C逗号操作符对两个操作数分别求值,丢弃第一个操作数的结果并返回第二个操作数。如果有多个逗号,操作符是左结合的,因此效果是从左到右求值。

因此,第二个示例将执行与第一个示例相同的操作。然而,这是一个糟糕的风格,因为没有理由使用逗号操作符,不像for语句体中的i=0, j-strlen(s)-1,分号不能使用。

,运算符从左到右求值,且在左操作数和右操作数求值之间有一个序列点,因此表示两个代码是等价的。

相关内容

  • 没有找到相关文章