2017-08-05 11 views
3

C式の多くでは、空白は無視されます(例:** bの場合はbがポインタです。空白は無視されます)。しかし、ほとんどの場合、無視することはできません。私たちはx +++ yと関連する(0,230,)に多くのSO投稿を取得します。私はx ++ + yが実際には(x ++)+ Yを意味することを知っています。なぜなら、postfixの優先順位が高いからです。また、x ++ + yとx + ++ yには違いがあります。 したがって、c式では空白が常に無視されるわけではありません。私は表現の空白のルールが何であるか知りたい。どこに定義されていますか?彼らは無視されていないとき? 2人のオペレータが他のオペレータ、特に増分/減分オペレータの後に来るのはいつですか?C式の空白を無視する規則

+0

私はあなたのリファレンスが[** C11標準(draft n1570)§5.1.1.2翻訳フェーズ**]であると信じています。(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570 .pdf)(3)および(7)を具体的に参照してください。 –

+0

行動の覚えやすい言葉は['maxunch' rule](https://en.wikipedia.org/wiki/Maximal_munch)です。最近のバージョンのC++ではネストされたテンプレート表記 'type1 >'の最大マッチルールが変更されていることに注意してください - 最大マッチの下では '>'はエラーです(閉じた '>'シンボルの間にスペースがなければなりません)。 –

+0

重複は、私が見つけた最初の質問です(カジュアルな検索の後で) "最大のムンク"について議論しています。質問は2つの他のものの複製として閉じられていますが、それ以外のものはインクリメント演算子の長いシーケンスSOの検索用語 '[c] maximal munch'はスローされます。 30件以上の質問。 –

答えて

6

空白は、トークンの作成にのみ関係します。 +と++は両方とも有効なトークンです。 Cの規則は、トークンが有効なトークンを生成する文字の最長シーケンスから形成されるため、空白なしの "++"は単一の "++"トークンになり、スペース文字を伴う "+ +"は2つの " + "トークン。 "+++"トークンがないので、 "+++"は "++"トークンに続いて "+"トークンになります。

関連する問題