a+++++b的含義

2020-08-11 23:27:10

在C語言中,對於程式碼的分界採用的是貪婪演算法,也就是從按照從左到右可以組合的最大字元數來劃分。

官方解釋:每一個符號應該包含儘可能多的字元。也就是說,編譯器將程式分解成符號的方法是,從左到右一個字元一個字元的讀入,如果該字元可能組成一個符號,那麼再讀入下一個字元,判斷已經讀入的兩個字元組成的字串是否可能是一個符號的組成部分;如果可能,繼續讀入下一個字元,重複上述判斷,直到讀入的字元組成的字串已不再可能組成一個有意義的符號。

比如上面這個題:a+++++b
從左到右開始,a可以和++組合,成爲a++
之後再分解爲++,從前面開始算就是(a++)++
之後爲+b
也就是說按照貪婪演算法來算,a+++++b可以分解成:
((a++)++)+b

因爲a++的結果爲左值,而左值不能再進行運算,故a+++++b編譯不能通過
除非寫成a+++ ++b,在++b前面有個空格,這時候根據貪婪演算法分解爲:
(a++)+(++b)
編譯通過