2017-08-05 69 views
3

在許多C表達式中,空白都被忽略(例如:在a ** b的情況下,其中b是指針,忽略空白)。但在少數情況下,他們不容忽視。我們在x +++ y和相關(c++ spaces in operators , what are the rules)上獲得了許多SO帖子。我知道x +++ y的意思是(x ++)+ Y,因爲後綴的優先級更高。 x ++ + y和x + ++ y也有區別。 所以在c表達式中並不總是忽略空格。我想知道表達式中空格的規則是什麼。它的定義在哪裏?當他們不被忽視?兩個運算符是否一個接一個地出現,尤其是遞增/遞減運算符?忽略C表達式中空白的規則

+0

我相信你的參考是[** C11標準(草案n1570)§5.1.1.2翻譯階段**](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570 .pdf)具體見(3)和(7)。 –

+0

行爲的引人注目的術語是['最大蒙克規則]](https://en.wikipedia.org/wiki/Maximal_munch)。請注意,最近版本的C++修改了嵌套模板表示法的最大嵌入規則'type1 >' - 在最大嵌入下,'>>'是一個錯誤(兩個閉合的'>'符號之間應該有一個空格。 –

+0

重複是我發現的最早的問題(在一次隨機搜索之後),討論了「最大蒙克」這個問題已被封閉爲另外兩個副本,但其他人關於增長操作符的長序列的含義,並非如此關於如何解析它以得到一系列運算符,你可以忽略這些重複項,關於該主題可能還有其他許多問題可以被引用,SO搜索術語'[c] maximal munch'throws增加30多個問題。 –

回答

6

空白僅與創建令牌相關。 +和++都是有效的令牌。 C中的規則是一個標記由最長的字符序列組成,這將創建一個有效的標記,所以沒有空白的「++」變成單個「++」標記,而帶有空格字符的「+ +」變成兩個「 +「令牌。由於沒有「+++」標記,「+++」變成了一個「++」標記,後跟一個「+」標記。