-1

次のような競争力のある C の質問に出くわしました。

次の出力を見つけます。

#include <stdio.h>
int main(void) {
    int a=5, b=10, c=5;
    int x;
    x = a>b>c;
    printf("%d\n", x);
    return 0;
}

コンパイラは 0 を返します。

私の説明は、おそらくこれは右から左への評価の副作用であるということです。私の推測では、最初b>cに評価されます (最初にスタックにプッシュされると仮定すると、 > の左から右への結合性を知っているので、ここで混乱します)、これは true と評価されます。この真の変数の値は、数値 > 0 (不明) であり、a > that_value評価されて結果が得られます。しかし、私は間違っているかもしれません!

出力がどのように評価されるかについての指針/洞察は役に立ちます。ありがとう。

編集:私は1を与えた非常に古いコンパイラでテストしました、それは私の側の間違いでした、それを修正しました。

4

2 に答える 2

4

C コンパイラは、コードを上から下、左から右に読み取ります。
ここで、a>b>c=> 5 > 10 > c => 0 > 5 (false は 0 で表されます) => 0


したがって、この優先順位に従うほとんどのコンパイラでは、答えは 0 になります。

操作順序の詳細については

于 2014-10-09T10:00:00.347 に答える
3

関係演算子の場合、結合性は左から右になるため、常に 0 を取得する必要があります。一部のコンパイラでは、どのようにして 1 を取得したのだろうか。

于 2014-10-09T10:02:17.257 に答える