C語言 有參宏的定義與使用
有參宏的形式與函數(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ù)功能。
點擊加載更多評論>>