帶參數的宏和函數很相似,但有本質上的區別:宏展開僅僅是字符串的替換,不會對表達式進行計算;宏在編譯之前就被處理掉了,它沒有機會參與編譯,也不會占用內存。而函數是一段可以重復使用的代碼,會被編譯,會給它分配內存,每次調用函數,就是執行這塊內存中的代碼。
示例1、用函數計算平方值。
#include intSQ(inty){ return((y)*(y)); } intmain(){ inti=1; while(i<=5){ printf("%d^2=%d\n",(i-1),SQ(i++)); } return0; }
運行結果:
1^2=1 2^2=4 3^2=9 4^2=16 5^2=25
示例2、用宏計算平方值。
#include #defineSQ(y)((y)*(y)) intmain(){ inti=1; while(i<=5){ printf("%d^2=%d\n",i,SQ(i++)); }
在 Visual Studio 和 C-Free 下的運行結果(其它編譯器的運行結果可能不同,這個++運算的順序有關):
3^2=1 5^2=9 7^2=25
在示例1中,先把實參 i 傳遞給形參 y,然后再自增 1,這樣每循環一次 i 的值增加 1,所以最終要循環 5 次。
在示例2中,宏調用只是簡單的字符串替換,SQ(i++) 會被替換為 ((i++)*(i++)),這樣每循環一次 i 的值增加 2,所以最終只循環 3 次。
由此可見,宏和函數只是在形式上相似,本質上是完全不同的。
帶參數的宏也可以用來定義多個語句,在宏調用時,把這些語句又替換到源程序中,請看下面的例子:
#include #defineSSSV(s1,s2,s3,v)s1=length*width;s2=length*height;s3=width*height;v=width*length*height; intmain(){ intlength=3,width=4,height=5,sa,sb,sc,vv; SSSV(sa,sb,sc,vv); printf("sa=%d,sb=%d,sc=%d,vv=%d\n",sa,sb,sc,vv); return0; }
運行結果:
sa=12,sb=15,sc=20,vv=60
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
創新在企業中的作用是什么?沒有創新就沒有競爭力,沒有創新就沒有價值提升。無論是哪種形式的創新,都需要認真的工作態度和務實的工作作風。企業采用新的生產方式和管理模式,應用創新技術、新知識、新工藝,提高產品質量,開發生產新產品,占領市場,改進新服務,實現市場價值。技術創新在改進產品的生產方法和過程中起著重要的作用。創新還可以促進企業組織形式和管理效率的提高,使企業適應經濟發展的要求,不斷提高效率。公司...
一、民生銀行信用卡商城購物流程網上訂購步驟:選擇商品→選擇付款方式→點擊購買→注冊或登錄→添加(修改訂單信息→確認訂單→支付訂單(可選商城在線支付、網銀支付、電話支付)詳細說明如下:1、選擇商品2、確認商品后選擇付款方式:一次性付款或者分期付款3、點擊放入購物車如果您尚未登錄,系統將提示您輸入用戶名、密碼及驗證碼進行登錄。若您還未注冊,可...
什么是股票持倉價持倉價也叫價格,當用戶買入一定數量的股票白銀后,如果未進行任何操作,此時持倉價=成本價。即用戶首次買入的價格可以視作為投資者的成本價(未經過遞延費、止損或止盈之前的總倉位成本價格)。 持倉價代表用戶當前持有倉位的價格,如果是買入的,每日持倉均會有持倉遞延費,也叫隔夜費,每日的持倉價格是會上漲的,但成本價格是用戶首次買入的價格。此時持倉價》成本價。當用戶買入的是股票的時候此時沒有遞延...