0

新しい例を導入せずに、C の条件式で値を代入し、それが変更されたかどうかを同時に確認できるかどうか疑問に思います。次の例では、関数testが修正されていると考えてください (パラメーターや戻り値を変更したくありません)。の値がテスト ルーチンによって 1 ずつインクリメントされるため、表示されるmainルーチンで条件のバリエーションを検索します。つまり、nsing の古い値との比較が必要です。同時に、テストによってインクリメントされない場合は印刷する必要があります。の値を格納する新しい変数を導入せずに、評価の順序などのルールを利用してこれが可能になるのではないかと思います。"works"n"works not"nn

#include <stdlib.h>
#include <stdio.h>

int test(int n)
{    
    return n + 1;    
}

int main()
{    
  int n;

  if ((n = test(n)) == n) {
     printf("works not\n");
  } else {
     printf("works\n");
  }

  return 0;    
}
4

2 に答える 2

1

短い答え: いいえ、できません。より長い説明については、シーケンスポイントを見てください

于 2012-09-20T15:46:08.987 に答える
0

いいえ、それはできません。これは未定義の動作です。代入と比較の間にシーケンス ポイントがないためです。

于 2012-09-20T15:44:21.953 に答える