位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C語(yǔ)言 > 問(wèn)題詳情

C語(yǔ)言 有參宏的定義與使用

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-01

有參宏的形式與函數(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ù)功能。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部