C語言
-
不帶引數的宏定義、
-
用來替換的——字串替換識別符號、
-
識別符號也叫宏名、
-
# define a 78 int main() { printf("%d\n", a); } # define a 78 int main() { int b; b = 3 * a; printf("%d\n",b); } -
將宏名替換字串的程序叫做——宏展開、
-
宏定義不是C陳述句、——define后面不用加分號、如果加分號則分號也會被替換、
-
define的有效范圍是自#define 之后直至本源檔案結束、define不能跨檔案使用、
-
undef可以終止宏定義的作用區域、
-
define可以參考已經定義的宏、可以層層置換
-
字串內的字符即使與宏相同、也不進行替換——雙引號內容不會被替換、
-
-
帶引數的宏定義、
-
、相當與增加了形參
-
# define a(c,b)(c)*(b)//括號可以不添加 # define a(c,b)c*b int main() { int e = a(1,3); printf("%d\n", e); -
在形參后面增加括號有助于減少錯誤
-
宏定義時宏名和帶引數的括號之間不能加空格
-
宏定義與函式的區別
-
函式呼叫時先求實參運算式的值、然后帶入形參、
-
帶引數的宏、只是簡單的替換、并沒有求運算式的值、
-
函式呼叫是在程式運行時處理、需要分配記憶體
-
宏展開不分配記憶體、因為是在編譯時進行的、所以沒有值傳遞和回傳值的概念、
-
宏的引數沒有型別限制、
-
宏使用次數多時將會增加源程式的長(
檔案的大小?)函式則不會此出現此情況 -
宏展開占用編譯時間、而不占用程式的運行時間、函式呼叫則占用的是程式運行的時間、
-
函式呼叫步驟
- 分配記憶體
2. 傳遞引數
3. 執行函式體
4. 回傳值
- 分配記憶體
-
、特殊
-
define MAX(a,b) (a)>(b)?(a);(b) int main() { int e = MAX(4,5); printf("%d\n", e); }//比較大小
-
-
、
-
-
-
C語言的三種預處理功能
- 宏定義、
2. 檔案包含、
3. 條件編譯、
- 宏定義、
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277.html
標籤:C
