#include <stdio.h>
main()
{
int i;
for(i=0; i<0, 5; i++)
printf("%d\n", i);
}
ループi<0, 5
の状態の部分がわかりません。for
にしてもi>0, 5
、出力に変化はありません。
これはどのように作動しますか?
コンマ演算子は、常にコンマ区切りリストの最後の値を返します。
基本的には、左側の値を評価して破棄し、右側の値を評価して返す二項演算子です。
これらを複数連鎖すると、最終的に連鎖の最後の値が生成されます。
anatolyg のコメントによると、これは、右側の値の前に左側の値を評価する場合に役立ちます (左側の評価に望ましい副作用がある場合)。
たとえばi < (x++, x/2)
、左側の値の評価の影響で右側の値に影響を与えるため、その演算子を使用するのは適切な方法です。
http://en.wikipedia.org/wiki/Comma_operator
int x = 100;
while(x --> 0) {
// do stuff with x
}
単なる別の書き方x-- > 0
です。
コンマ演算子はi<0
Ori>0
を評価し、無視します。したがって、それは常に5
状態に存在するものです。
したがって、次のようになります。
for(i=0;5;i++)
コマ演算子は、初期化と増分部分に対して実行され、次のようなfor(i=0,j=20;i<j;i++,j--)
ことを実行します。比較部分で実行すると、最後の演算子が評価されます(以前に回答済みです)。
i<0,5
は常に に評価され5
、常に正しい式が に対して返されex1,ex2
ます。
コンマ演算子は、最初のオペランドにいくつかの副作用がある場合を対象としています。これは単なるイディオムであり、コードを読みやすくすることを目的としています。条件付きの評価には影響しません。
例えば、
for (i = 0; i<(i++, 5); i++) {
// something
}
インクリメントi
し、。かどうかを確認しますi<5
。