2017-02-28 10 views
-2

私はちょうどCプログラミングの学習を始めました。表現評価に基づいた質問があります。 我々は3つの変数、ab、およびcをお持ちの場合:C - 優先順位の増減?

  1. c=a+++b++;
  2. c=a+++++b;

なぜ第一表現の有効と無効である第二?

+0

答えは「最大マンク」ルールとして口語的に知られています。字句アナライザはトークンを作るためにできるだけ多くをつかみます。 'c = a +++ b ++;'を見ると 'a ++ + b ++'を認識します。 'c = a +++++ b;'と見ると 'a ++ ++ + b'を認識し、インクリメント操作の結果をインクリメントすることはできません。同じことを求める他の質問があるはずです。 –

+0

ジョナサンが述べたことに加えて、コンパイラがインクリメント演算子に必要な* lvalueを求めるプロンプトを表示するのはそのためです。* – nullpointer

+0

@JonathanLefflerこれは、より重複する可能性があります(36秒で私を打ち負かします):http://stackoverflow.com/questions/5341202/why-doesnt-ab-work-in-c –

答えて

-1

a+++a++ +と解釈されますが、+++bは、別の変数を前に置いてもエラーを生成します。

実際には、スペースを入れずにそのような式を書くことは非常に悪い考えです。

  1. a++ + b++
  2. a++ + ++b

をし、すべてが期待どおりに動作します:あなたはそれを見て、誰がちょうど書き換える:)あなたのコードを見て戻ってきたときに、自分自身を混同し、困らせるでしょう。

+0

"原理的には、1)と2)は共に働いていたはずです" - Cではなく。 – Olaf

+0

どうしてですか? 2)で式をどのように解析するかによって異なります。 – Demq

+0

両方の式の解析方法についての標準は明確です。したがって、「依存する」はありません。 (ちょうど議論のために:非貪欲なアプローチが使用された場合、バージョン1( 'a + ++ b ++')はUBを呼び出すでしょう。どちらの方法でもUBが呼び出されます。あなたの答えが意味するかもしれないatrランダム)。 – Olaf

関連する問題