說明:紅線的意義:
巨集展開:形參用實參換,其它字元保留
巨集體及各形參外一般應加括號()
1.帶參巨集定義的一般格式
#define 巨集名(形參表) 語言符號字串
2.帶參巨集的呼叫和巨集展開
(1)呼叫格式:巨集名(實參表)
(2)巨集展開:用巨集呼叫提供的實參字串,直接置換巨集定義命令列中、相應形參字串,非形參字元保持不變。
3.說明
(1)定義有參巨集時,巨集名與左圓括號之間不能留有空格。否則,c編譯系統將空格以後的所有字元均作為替代字串,而將該巨集視為無參巨集。
(2)有參巨集的展開,只是將實參作為字串,簡單地置換形參字串,而不做任何語法檢查。在定義有參巨集時,在所有形參外和整個字串外,均加一對圓括號。
!!!注意:有參巨集的展開,嚴格按照上述案例的格式,尤其是第乙個巨集展開,不要想當然的這樣:z=(x+y)*(x+y) !!!
(3)雖然有參巨集與有參函式確實有相似之處,但不同之處更多,主要有以下幾個方面:
1)呼叫有參函式時,是先求出實參的值,然後再複製乙份給形參。而展開有參巨集時,只是將實參簡單地置換形參。
2)在有參函式中,形參是有型別的,所以要求實參的型別與其一致;而在有參巨集中,形參是沒有型別資訊的,因此用於置換的實參,什麼型別都可以。有時,可利用有參巨集的這一特性,實現通用函式功能。
3)使用有參函式,無論呼叫多少次,都不會使目標程式變長,但每次呼叫都要占用系統時間進行呼叫現場保護和現場恢復;
而使用有參巨集,由於巨集展開是在編譯時進行的,所以不佔執行時間,但是每引用1次,都會使目標程式增大1次。
C語言 有參巨集
說明 紅色箭頭表示的意思是 巨集展開 形參用實參換,其它字元保留 巨集體及各形參外一般應加括號 如 1 帶參巨集定義的一般格式 define 巨集名 形參表 語言符號字串 2 帶參巨集的呼叫和巨集展開 1 呼叫格式 巨集名 實參表 2 巨集展開 用巨集呼叫提供的實參字串,直接置換巨集定義命令列中 相...
巨集定義(無參,有參,巨集函式)(詳細介紹)
以符號 開頭的命令,如 define n 10 define 這些命令不是c語言本身的組成部分,而是由c編譯系統提供的。在通常的編譯 詞法和語法分析 生成 優化等 之前,編譯系統要預先對這些命令進行處理,因此稱為 編譯預處理 命令。編譯預處理可以改善程式設計環境,提高程式設計效率,有助於編寫易移植 ...
C語言變參函式巨集定義分析
在c語言變參函式中總是會用到下面幾個巨集 0 define adnbnd sizeof acpi native int 1 1 define bnd x,bnd sizeof x bnd bnd 2 define va arg ap,t t ap bnd t,aupbnd bnd t,adnbnd ...