このコードブロックについて説明してください:
void main()
{
int t,
a = 5,
b = 10,
c = 15;
t = (++a && ++b, ++a), ++a || ++c; // need explanation for this line
printf("%d %d %d %d", t, a, b, c);
}
このコードブロックについて説明してください:
void main()
{
int t,
a = 5,
b = 10,
c = 15;
t = (++a && ++b, ++a), ++a || ++c; // need explanation for this line
printf("%d %d %d %d", t, a, b, c);
}
コンマ演算子はその 2 番目のオペランドの結果を返し、||演算子は短絡します。したがって、この場合は次のようになります。
++a評価されて、a現在は未使用品6です。
(1) の結果が非ゼロだったので、 の右側&&が評価されます。ということは++b、そうbなる11。
(1) と (2) はカンマ演算子の左側なので、結果&&は破棄されます。(それ1があなたにとって重要であれば、それはです)。
最初の++a右側,が評価されます。 aです7。
への代入tが行われます -tは今7、最初のコンマ演算子の結果です。
それはすべて別のカンマ演算子の左側だったので、結果 ( 7) は破棄されます。次に++a評価です。 aです8。
aは 0 ではないため、短絡||し、++cは評価されません。cとどまります15。
結果: tis 7、ais 8、bis 11、およびcis 15。printfステートメントは次を出力します。
7 8 11 15
全体として、このコードは、次のように記述した方が理解しやすいでしょう。
++a;
++b;
t = ++a;
++a;
これはまったく同じ動作をします。