C語(yǔ)言 有參宏的定義與使用
有參宏的形式與函數(shù)有些相似,需要參數(shù)替換實(shí)現(xiàn)宏的展開(kāi)。
1.有參宏定義的一般格式
#defme 宏名(形參表) 語(yǔ)言符號(hào)字符串
2.有參宏的調(diào)用
對(duì)于有參宏的調(diào)用需要傳遞參數(shù),調(diào)用格式為:
調(diào)用格式:宏名(實(shí)參表)
對(duì)于有參宏的調(diào)用需要傳遞參數(shù),調(diào)用格式為:
調(diào)用格式:宏名(實(shí)參表)
3.有參宏的展開(kāi)
用宏調(diào)用提供的實(shí)參字符串直接置換宏定義命令行中相應(yīng)形參字符串,非形參字符保持不變。
4.說(shuō)明
①定義有參宏時(shí),宏名與左圓括號(hào)之間不能留有空格。否則,C編譯系統(tǒng)會(huì)將空格以后的所有字符均作為替代字符串,而將該宏視為無(wú)參宏。例如:
#define SUM(a,b) a+b
如果定義成如下形式,編譯時(shí)會(huì)報(bào)錯(cuò):
#define SUM (a,b) a+b
(2)有參宏的展開(kāi),只是將實(shí)參作為字符串簡(jiǎn)單地置換形參字符串,而不做任何語(yǔ)法檢查。在定義有參宏時(shí),在整個(gè)字符串外均加一對(duì)圓括號(hào)。
5.有參宏與有參函數(shù)的比較
雖然有參宏與有參函數(shù)確實(shí)有相似之處,但不同之處更多,主要有以下幾個(gè)方面:
(1)調(diào)用有參函數(shù)時(shí),是先求出實(shí)參的值,然后再?gòu)?fù)制一份給形參。而展開(kāi)有參宏時(shí),只是將實(shí)參簡(jiǎn)單地置換形參。
(2)函數(shù)調(diào)用是在程序執(zhí)行期間調(diào)用時(shí)才處理的,為形參分配內(nèi)存空間。而宏則是由預(yù)處理器在編譯預(yù)處理階段進(jìn)行的,且宏不需要分配內(nèi)存空間,不需要進(jìn)行值的傳遞,也沒(méi)有“返回值” o
(3)在有參函數(shù)中,形參是有類型的,所以要求實(shí)參的類型與其一致。而在有參宏中,形參是沒(méi)有類型信息的,因此用于置換的實(shí)參,什么類型都可以。有時(shí),可利用有參宏的這一特性,實(shí)現(xiàn)通用函數(shù)功能。
點(diǎn)擊加載更多評(píng)論>>