舉個(gè)例子吧:
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),崇義企業(yè)網(wǎng)站建設(shè),崇義品牌網(wǎng)站建設(shè),網(wǎng)站定制,崇義網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,崇義網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
#include stdio.h
//宏定義:
#define MAX(a,b) (ab) ? a : b
int main()
{
int x,y,max;
printf("input two numbers: ");
scanf("%d%d",x,y);
max = MAX(x,y);//調(diào)用宏
printf("max=%d\n",max);
}
宏定義是就完全替換,加不加分號(hào)看你自己喜歡,比如一個(gè)宏定義
#define WRCMD a = 1
這里加了分號(hào),那在用時(shí)就不用加直接寫(xiě)WRCMD然后換行就行,
如果這時(shí)沒(méi)加,那就在用時(shí)是這個(gè)樣子的
WRCMD;
宏定義的基礎(chǔ)知識(shí)。引用宏定義時(shí),直接代入進(jìn)行代換。
既然已經(jīng)宏定義SUB(a) (a)-(a),而程序中出現(xiàn)的對(duì)應(yīng)a的是a+b,那么就將a換為a+b代入表達(dá)式:
d=SUB(a+b)*c=(a+b)-(a+b)*c=(2+3)-(2+3)*5
直接用(a+b)-(a+b)代換SUB(a+b)。這一點(diǎn)和數(shù)學(xué)是不同的,不要強(qiáng)行往數(shù)學(xué)上靠。
#include 是用來(lái)引出庫(kù)函數(shù)用來(lái)調(diào)用一些系統(tǒng)已經(jīng)定義好的函數(shù),方便用戶(hù)使用,#define是宏定義,格式為#define n m 表示用n來(lái)代替m使用,但和賦值的概念是不同的,當(dāng)定義好后以后就不能改變它的值,除非用#undef 來(lái)消除這個(gè)宏定義.而且#define和#include并非是c語(yǔ)言的語(yǔ)句.
直接調(diào)用即可。如下示例:
#includestdio.h#define?sum(b,c){int?d=0;d=b+c;printf("兩者的和:%d\n",d);}int?main(){????int?x=0,y=0;????scanf("%d%d",x,y);????sum?(x,y);????return?0;}
拓展資料
使用宏函數(shù)或者宏函數(shù)時(shí),注意如下幾點(diǎn):
1.宏函數(shù)的參數(shù)沒(méi)有類(lèi)型,預(yù)處理器只負(fù)責(zé)做形式上的替換,而不做參數(shù)類(lèi)型檢查,所以傳參時(shí)要格外小心。
2.宏函數(shù)定義要注意格式,尤其是括號(hào)。
如果上面的宏函數(shù)寫(xiě)成 #define MAX(a, b) (ab?a:b),省去內(nèi)層括號(hào),則宏展開(kāi)就成了k = (i0x0fj0x0f?i0x0f:j0x0f),運(yùn)算的優(yōu)先級(jí)就錯(cuò)了。同樣道理,這個(gè)宏定義的外層括號(hào)也是不能省的。若函數(shù)中是宏替換為 ++MAX(a,b),則宏展開(kāi)就成了 ++(a)(b)?(a):(b),運(yùn)算優(yōu)先級(jí)也是錯(cuò)了。
3.宏函數(shù)往往會(huì)導(dǎo)致較低的代碼執(zhí)行效率。
若是普通函數(shù),則通過(guò)遞歸,可取的最大值,時(shí)間復(fù)雜度為O(n)。但若是宏函數(shù),則宏展開(kāi)為( a[n]max(n-1)?a[n]:max(n-1) ),其中max(n-1)被調(diào)用了兩遍,這樣依此遞歸下去,時(shí)間復(fù)雜度會(huì)很高。
宏定義屬于預(yù)編譯階段的處理過(guò)程。預(yù)編譯是整個(gè)編譯過(guò)程的第一步。編譯器將檢查代碼中的所有預(yù)編譯語(yǔ)句,遇到#include則將被包含的文件整個(gè)復(fù)制粘貼到#include位置替換#include語(yǔ)句,遇到#define語(yǔ)句則定義該宏并將文本中所有出現(xiàn)該宏的代碼予以替換,遇到#ifdef、#ifndef、#endif語(yǔ)句則進(jìn)行判斷和執(zhí)行相應(yīng)操作。這個(gè)時(shí)候程序的源代碼還是文本形式,編譯器還沒(méi)有開(kāi)始語(yǔ)法分析,連函數(shù)的概念都不存在,又怎么判斷函數(shù)的代碼誰(shuí)先執(zhí)行誰(shuí)后執(zhí)行呢?
本文名稱(chēng):c語(yǔ)言取消宏定義函數(shù),c++宏定義函數(shù)
文章起源:http://jinyejixie.com/article16/hsiidg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站內(nèi)鏈、標(biāo)簽優(yōu)化、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)公司、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)