=+
と+=
(および他の代入演算子)に違いがあるのではないかと思っていました。私は試しましたが、両方とも同じことをしました。違いがあるのですか、それとも慣習がありますか?私のコンパイラは標準をチェックしないので、両方とも機能しますか?
編集:間違えました。テスト中に悪い入力を使用したため、両方が同じことをしていると思うようになりました。彼らは2つの異なるものであることが判明。
+=
演算子加算右辺値に右辺値
x += y;
x = x + y;
=+
単にassigns右辺値に左辺値
x =+ y;
x = +y;
x = y;
現代のC、または適度に古いCでは、+=
は複合代入演算子であり、=+
は2つの別個のトークンとして解析されます。 =
および+
。句読点トークンを隣接させることができます。
だからあなたが書いた場合:
x += y;
それは同等です
x = x + y;
x
が1回だけ評価されることを除きます(より複雑な式の場合は問題になります)。
あなたが書く場合:
x =+ y;
それは次のように解析されます
x = + y;
+
は単項プラス演算子です。
非常に Cの初期バージョン(1970年代中頃、1978年にK&R1が発表される前)は、複合割り当てに異なるシンボルを使用していました。最新のCが+=
を使用する場合、初期のCは=+
を使用しました。初期のCには単項+
演算子はありませんでしたが、単項-
演算子があり、=-
を使用すると問題が発生しました。プログラマーはx=-y
を意味するつもりでx = -y
と書くが、それはx =- y
と静かに解釈された。この問題を回避するために、1978年以前に言語が変更されました。 1999年の終わり頃、私は=-
のあいまいな使用について警告するコンパイラ(VMS上のVAXC)を使用しましたが、古い意味を使用していました。あなたがいくつかのvery古いソフトウェアやハードウェアで遊んでいる愛好家でない限り、それは今心配するべきではありません。