C語言中有單字符符號和多字符符號之分,那麼,當C編譯器讀入一個字符‘/’後又跟了一個字符‘*’,那麼編譯器就必須作出判斷:是將其做爲兩個分別的符號對待,仍是合起來做爲一個符號對待。C語言對這個問題的解決方案能夠概括爲一個很簡單的規則:每個符號應該包含儘量多的字符。也就是說,編譯器將程序分解成符號的方法是,從左到右一個字符一個字符地讀入,若是該字符可能組成一個符號,那麼再讀入下一個字符,判斷已經讀入的兩個字符組成的字符串是否多是一個符號的組成部分;若是可能,繼續讀入下一個字符,重複上述判斷,直到讀入的字符組成的字符串已再也不可能組成一個有意義的符號。這個處理策略有時被稱爲「貪心法」。固然,這與算法中的貪心法不一樣。K&R對這個方法的表述以下,「若是(編譯器的)輸入流截止至某個字符以前都已經被分解爲一個個符號,那麼下一個符號將包括從該字符以後可能組成一個符號的最長字符串。」
算法
a---b 等同於a-- -b 而不是a- --b字符串
摘自編譯器
《c陷進與缺陷》編譯