次のコード行を記述しました。
if (++(data_ptr->count) > threshold) { /*...*/ } // example 1
私の意図は、と比較する前にポイントするcount
データ構造内の変数をインクリメントすることであり、このコード行は機能します。data_ptr
threshold
data_ptr
代わりに、比較を行う前にインクリメントしたい場合は、次のように記述します。
if ((++data_ptr)->count > threshold) { /*...*/ } // example 2
好奇心から、私は次のコード行も試しました。
if (++data_ptr->count > threshold) { /*...*/ } // example 3
そして、それが最初のものとまったく同じように動作することを発見しました。
最初の質問: 例3が例1と同じように機能するのはなぜですか?それはオペレーターの優先順位の問題ですか?標準に何かありますか?答えがはっきりしなかったので、簡単なテストプログラムを書かなければなりませんでした。
2番目の質問:if
このステートメントを別の方法で書く必要がありますか?混乱を避けるために、最初に独自の行でインクリメントを実行してから、条件をテストすることができます。これは必要ですか、それとも最初の2つの例はそれ自体で十分に明白ですか?