位置:首頁 > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 有參宏的定義與使用

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

有參宏的形式與函數(shù)有些相似,需要參數(shù)替換實現(xiàn)宏的展開。

1.有參宏定義的一般格式

    #defme  宏名(形參表)  語言符號字符串

2.有參宏的調(diào)用

對于有參宏的調(diào)用需要傳遞參數(shù),調(diào)用格式為:

    調(diào)用格式:宏名(實參表)

對于有參宏的調(diào)用需要傳遞參數(shù),調(diào)用格式為:

    調(diào)用格式:宏名(實參表)

3.有參宏的展開

用宏調(diào)用提供的實參字符串直接置換宏定義命令行中相應(yīng)形參字符串,非形參字符保持不變。

4.說明

①定義有參宏時,宏名與左圓括號之間不能留有空格。否則,C編譯系統(tǒng)會將空格以后的所有字符均作為替代字符串,而將該宏視為無參宏。例如:

    #define SUM(a,b) a+b

如果定義成如下形式,編譯時會報錯:

    #define SUM  (a,b)  a+b

(2)有參宏的展開,只是將實參作為字符串簡單地置換形參字符串,而不做任何語法檢查。在定義有參宏時,在整個字符串外均加一對圓括號。

5.有參宏與有參函數(shù)的比較

雖然有參宏與有參函數(shù)確實有相似之處,但不同之處更多,主要有以下幾個方面:

(1)調(diào)用有參函數(shù)時,是先求出實參的值,然后再復(fù)制一份給形參。而展開有參宏時,只是將實參簡單地置換形參。

(2)函數(shù)調(diào)用是在程序執(zhí)行期間調(diào)用時才處理的,為形參分配內(nèi)存空間。而宏則是由預(yù)處理器在編譯預(yù)處理階段進(jìn)行的,且宏不需要分配內(nèi)存空間,不需要進(jìn)行值的傳遞,也沒有“返回值” o

(3)在有參函數(shù)中,形參是有類型的,所以要求實參的類型與其一致。而在有參宏中,形參是沒有類型信息的,因此用于置換的實參,什么類型都可以。有時,可利用有參宏的這一特性,實現(xiàn)通用函數(shù)功能。

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

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