+++++ bの意味についての質問

int型= 1、B = 1。

INT C = +++++のB。

printf( "C =%のD / N"、C)。

このコードはでコンパイルされていません。

   

+++++ B型の意味:解決する唯一の意味のある方法である:A ++ + ++ B しかし、によると口法ルールはに分けるべきである:A ++ ++ + B、このタイプサブ構文的に正しくないと等価である用語、: ((++)+)+ Bは、しかしながら、++ 結果値として残すことができないので、コンパイラが受け入れない++ として後で+ 演算子オペランド。あなたは字句曖昧さの問題を解決するための規則に従っている場合、この方法では、構文的の例を解決し、意味がありません。そのため、プログラミングの練習では、慎重なアプローチは、あなたがこれらの構造の非常に認識している場合を除き意味、同様の構造を使用して回避しようとすることです。参考:1 、 " Cのトラップと落とし穴。"

  • ++ なぜ左の値として使用することはできません

++の値は、一時的な変数であるので、(彼らはすぐに消えるので)一時変数の割り当てを与えることができません

++ 値は、いない一時的な変数

 

知識は加えました:

:また、貪欲法などの公知の口法、もしコンパイラ文字の入力ストリームを閉じる前にシンボルに分解された、文字の可能な形成を含む次のシンボル次いでから以降最長のシンボル文字列。すなわち、各シンボルは、できるだけ多くの文字が含まれている必要があります。換言すれば、コンパイラプログラムの方法は、左から右へ文字による文字が読み取られ、シンボルに分割された文字が読み取られたと判断し、その後、次の文字を二に読み込まれ、一つのシンボルで構成されてもよい場合、文字の文字列が読み込まれるまで、文字の文字列は、次の文字を読むことを続けるならば、判断が繰り返され、一つのシンボルの一部であってもよいかどうかは、意味のあるシンボルを形成することはできなくなりました。

例えば、--- B と表現-b A-- 同じ意味を持つA- -B- 異なる意味。

別の例:B = A / P * / P * ポイント除数* /; ステートメントの使用目的である分割のp 指さ値、その後商割り当てるBを実際には、/ * コメントの開始のために理解されているコンパイラ、コンパイラは文字を読むことを続けるまで* / 表示されます。従って書き換え:B = A / * P / P * ポイント除数* /; より明確点であるB = A /(* P) / * P 除数をポイント* /; この曖昧所謂。

左右の値を代入値に残さが代入演算子の値は、両側に配置することが可能であり、

例えば:。;ダブルBはA = B = 2.0; = Bと、1 = int型及びBは左側の値であるが、すべての変数の値が残っているが、CONST 量例外。その後、右辺値は、例えば、唯一の正しい値を代入演算子の上に配置することができる:int型A = 0; CHAR * B = "こんにちは"; A = 3; // ERROR "こんにちは" ERROR = B // ここでは3 「こんにちは「右の値であり、それは代入演算子の上に残されていない、すべての定数、および文字列が正しい値です。I および-iが発現されしかし、1つは左の値である(I) 一方が正しい値である(-i) + - 左請求の値に作用するこれら2事業者は、私は++ 、合法的な(-i)+ 違法。

おすすめ

転載: www.cnblogs.com/yangjiquan/p/11465418.html