-3

先週面接を受けましたが、面接担当者から演算子の優先順位の問題について尋ねられました。このプログラムのロジックを理解するのに誰か助けてください。私はUbuntu(Linux)に取り組んでいます

int main()
{
    int var = 90;
    if(var  += var == ++var ==8)
        printf("val of var is %d \n",var);
}

このプログラムの出力は 91 です。

ループ内の複数の == はどのように評価されますか (結合性は左から右へ)???

興味深いことに、コードを次のように微調整すると

int main()
{
    int var = 90;
    if(var  += var == ++var)
        printf("val of var is %d \n",var);
}

次に、出力は92になります。

この動作はコンパイラに依存するものですか?

4

2 に答える 2

3

正しい答えは、副作用のある式の間にシーケンス ポイントがないため、これは未定義の動作であるということです。

于 2013-02-12T10:50:56.840 に答える
-1

ステップバイステップでやってみましょう

  1. ++ var

  2. 91 == 91(+ = var == ++ var)

  3. 1 == 8(+ = var == 8)

  4. var = 91 + 0

于 2013-02-12T11:46:27.530 に答える