C宏替換優先順序,宏替換優先順序

來源:互聯網
上載者:User

C宏替換優先順序,宏替換優先順序

宏替換隻是簡單的替換,它不會影響運算子優先順序的,例如:


#define DOUBLE(x) x+xint i = DOUBLE(5)*5;printf("%d", i);


相當於i=5+5*5。i=30而不是50


一道二級c宏替換題

這涉及到宏裡面的運算優先順序的顯式表達問題。宏定義的運算式,在編譯過程的第一步,預先處理時,編譯器會對你的代碼中所有出現了宏變數(或者宏函數)的地方作文本替換,注意是文本替換。這就相當於編譯器在用你給的答案去填空一樣。所以,如果你在給出的“答案”中沒有用括弧顯式地標明你希望的運算順序,那編譯器“填空”後,可能就不是你要的運算順序了。
舉一個例子,填空:給定a, b, c三個數,請完成下面的計算式,要求算a與b的和與c的積
___________ * c
本來要填的是(a + b),結果你給編譯器的是
#define X a+b
編譯器去填空,就成了
a + b * c,完全不是你想要的計算順序了

所以你的宏函數作了文本替換(注意宏函數的替換包括參數替換)就成了
i = 4 + 4 * 4 + 4 / 2 + 2 * 2 + 2 = 28
 
C語言中優先順序與結合性 例如:*p++

前兩天回答過類似對問題了。
*P++等價於*(P++),其中括弧指的是結合而不是優先運算!

P++意味著使用P之後再++,因為++在P之後,如果使++P,那麼先讓P加1(使1個長度單位或者步長,因為使數組元素對長度),再使用P。

所以*P++先取得*P對值參加運算再P++,而*(++P)先P++再取得*P。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.