自增自減運算的原理解析

來源:互聯網
上載者:User

int a=1;

int b=1;

a+++++b;

a---b;

經常有人問到以上的這些運算式的值是什麼..?是根據什麼原理來分析這樣的運算式...?就這個內容,來討論一下...

 

這裡需要涉及到"貪進法"這個說法了...在<<c traps and pitfalls>>中說明了這樣一個規則:每一個符號應該包含儘可能多的字元.

意思是:編譯器在剖析器的時候,是從左至右的單個字元讀入的,那麼類似"/*test"這樣的字串,那要怎麼解析呢..?根據規則,第一個讀入的肯定是字元'/'了,那麼要儘可能包含多的字元,嘗試著去包含字元'*',結果他們能夠組成有效字串"/*",那麼繼續解析,下一個字元是't',和前面的字串組合起來沒有意義,因此"/*"是能夠組合的有意義的最長的字串了.因此,解析的結果出來了,"/*test"應該解析為"/*"再加上"test","test"繼續按照上面的規則進行解析...這就是詞法解析的過程,即為"貪進法".

 

那麼原理上明白後..我們來看錶達式a+++++b;應該如何解析:

同樣根據規則來:

先解析出字元'a',下一個是字元'+',根據儘可能多的包含字元的原則,下面一個也是字元'+',組合在一起是"++",這在c語言中就是自增運算子了,因此完全是有效運算子,所以這樣就解析了"a++",依此類推,根據規則,接下來的也是會解析成"++"了,這裡就有了一個問題了...

應該都知道,在c語言中,a++是不能作為左值使用的,因此根據規則來是解析成"++",整體應該是"(a++)++",但是因為限制了a++不能作為左值,違反了c語言的文法,所以不能這樣解析,那麼就只能解析成'+'了,那麼現在就解析成了"(a++)+(++b)"...

所以結果也就自己出來了...不再贅述.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.