私はちょうどCプログラミングの学習を始めました。表現評価に基づいた質問があります。 我々は3つの変数、a
、b
、およびc
をお持ちの場合:C - 優先順位の増減?
c=a+++b++;
c=a+++++b;
なぜ第一表現の有効と無効である第二?
私はちょうどCプログラミングの学習を始めました。表現評価に基づいた質問があります。 我々は3つの変数、a
、b
、およびc
をお持ちの場合:C - 優先順位の増減?
c=a+++b++;
c=a+++++b;
なぜ第一表現の有効と無効である第二?
a+++
はa++ +
と解釈されますが、+++b
は、別の変数を前に置いてもエラーを生成します。
実際には、スペースを入れずにそのような式を書くことは非常に悪い考えです。
a++ + b++
a++ + ++b
をし、すべてが期待どおりに動作します:あなたはそれを見て、誰がちょうど書き換える:)あなたのコードを見て戻ってきたときに、自分自身を混同し、困らせるでしょう。
答えは「最大マンク」ルールとして口語的に知られています。字句アナライザはトークンを作るためにできるだけ多くをつかみます。 'c = a +++ b ++;'を見ると 'a ++ + b ++'を認識します。 'c = a +++++ b;'と見ると 'a ++ ++ + b'を認識し、インクリメント操作の結果をインクリメントすることはできません。同じことを求める他の質問があるはずです。 –
ジョナサンが述べたことに加えて、コンパイラがインクリメント演算子に必要な* lvalueを求めるプロンプトを表示するのはそのためです。* – nullpointer
@JonathanLefflerこれは、より重複する可能性があります(36秒で私を打ち負かします):http://stackoverflow.com/questions/5341202/why-doesnt-ab-work-in-c –