說明:
紅色箭頭表示的意思是:
巨集展開:形參用實參換,其它字元保留
巨集體及各形參外一般應加括號()
如
1.帶參巨集定義的一般格式
#define 巨集名(形參表) 語言符號字串
2.帶參巨集的呼叫和巨集展開
(1)呼叫格式:巨集名(實參表)
(2)巨集展開:用巨集呼叫提供的實參字串,直接置換巨集定義命令列中、相應形參字串,非形參字元保持不變。
3.(1)定義有參巨集時,巨集名與左圓括號之間不能留有空格。否則,c編譯系統將空格以後的所有字元均作為替代字串,而將該巨集視為無參巨集。
(2)有參巨集的展開,只是將實參作為字串,簡單地置換形參字串,而不做任何語法檢查。在定義有參巨集時,在所有形參外和整個字串外,均加一對圓括號。也就是說,巨集體及各形參外一般應加括號()
如
有參巨集的展開例項:
注意:嚴格按照上述例項格式進行巨集展開,不要想當然寫成(x+y)*(x+y)!!!
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 ...