C語言詳細分析宏定義的使用
更新時間:2022年04月21日 11:01:28 作者:清風自在 流水潺潺
宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的替換。字符串中可以含任何字符,可以是常數,也可以是表達式,預處理程序對它不作任何檢查,如有錯誤,只能在編譯已被宏展開后的源程序時發(fā)現
一、C語言中函數的“缺陷”
實參和形參之間僅僅是值傳遞,因此,函數中無法直接改變實參。
二、再次理解函數
函數是一種代碼復用的手段
- 把實現某個功能的代碼片段進行封裝(當作一個整體)
- 給這個代碼片段一個合適的名字(通過名字使用代碼)
- 定義參數(定義代碼片段需要處理的問題)
三、C語言中的宏
- 宏是C語言中代碼復用的補充方式
- 宏定義語法:#define MACRO(param) code_segment
- 宏使用語法:MACRO(num);
例如:
#define ADD(a,b) a + b
int main()
{
int z = ADD(1,2);
printf("z = %d\n", z);
return 0;
}四、宏與函數的不同
- 宏不是函數,使用宏沒有函數調用的過程
- 函數調用先傳遞參數值,然后跳轉執(zhí)行函數體,最后返回
- 使用宏只是單純“代碼復制粘貼”,然后替換參數
- 同一個函數,無論調用多少次,都執(zhí)行相同的函數體代碼
- 同一個宏,每次使用都會“復制粘貼”相同代碼
五、編譯器組成簡介
- 預處理模塊:處理所有宏以及#開頭的語句(復制粘貼替換)
- 編譯模塊:將C程序翻譯成二進制程序
- 鏈接模塊:將二進制程序組合成可執(zhí)行程序
六、宏使用示例
用一個簡單的交換兩個數的值作為例子:
#include <stdio.h>
#define SWAP(a, b) {int t = a; a = b; b = t;}
int main()
{
int x = 1;
int y = 2;
SWAP(x, y); // {int t = x; x = y; y = t;}
printf("x = %d, y = %d\n", x, y);
return 0;
}下面為輸出結果:

七、再論宏常量
#define NAME value
- 預處理模塊將代碼中出現的NAME標識符替換為value
- 因此,宏常量在本質上與字面量相同(真正意義的常量)
八、小結
- 宏是C語言中代碼復用的補充方式
- 宏不是函數,使用宏沒有函數調用的過程
- 預處理模塊對宏的處理方式:復制粘貼替換
- 程序中使用宏的地方最終被處理為對應的代碼片段
- 宏常量的本質就是字面量
到此這篇關于C語言詳細分析宏定義的使用的文章就介紹到這了,更多相關C語言宏定義內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

