說到宏定義,我們應該先了解什麼是預處理指令,相信大家並不會陌生,之前我們程式設計時,程式的開頭#include指令,#define指令都是預處理指令,它能使我們的編譯更加的高效,便捷,因此C語言中是允許使用者自己加入一些特定的預處理指令的。
一,不帶引數的宏定義
不帶引數的宏定義是比較簡單的,就是用一個指定的識別符號來代表一個字串。它的一般形式為;
#define 識別符號 字串
它的作用是在本程式檔案中用指定的識別符號E來代替2.718281828459這個字串。在進行預處理時,將程式中凡是在該指令以後出現的所有的E都用2.718281828459代替。這種方法使使用者能以一個簡單的名字代替一個長的字串,因此把這個識別符號(名字)稱為"宏名”
在預處理時將宏名替換成字串的過程稱為"宏展開“。#define就是宏定義指令。
二,帶引數的宏定義
帶引數的宏定義不是僅僅進行簡單的字串替換,還要進行引數替換。其定義的一般形式為;
#define 識別符號(宏名)(引數表) 字串
字串中包含在括號中所指定的引數。
擴充套件資料:
宏定義只佔編譯時間,函式呼叫則佔用執行時間(分配單元,儲存現場,值傳遞,返回),每次執行都要載入,所以執行相對宏定義會較慢。
使用宏定義次數多時,宏定義展開後源程式很長,因為每展開一次都使程式增長,但是執行起來比較快一點(這也不是絕對的,當有很多宏定義展開,目標檔案很大,執行的時候執行時系統換頁頻繁,效率就會低下)。而函式呼叫不使源程式變長。
說到宏定義,我們應該先了解什麼是預處理指令,相信大家並不會陌生,之前我們程式設計時,程式的開頭#include指令,#define指令都是預處理指令,它能使我們的編譯更加的高效,便捷,因此C語言中是允許使用者自己加入一些特定的預處理指令的。
一,不帶引數的宏定義
不帶引數的宏定義是比較簡單的,就是用一個指定的識別符號來代表一個字串。它的一般形式為;
#define 識別符號 字串
它的作用是在本程式檔案中用指定的識別符號E來代替2.718281828459這個字串。在進行預處理時,將程式中凡是在該指令以後出現的所有的E都用2.718281828459代替。這種方法使使用者能以一個簡單的名字代替一個長的字串,因此把這個識別符號(名字)稱為"宏名”
在預處理時將宏名替換成字串的過程稱為"宏展開“。#define就是宏定義指令。
二,帶引數的宏定義
帶引數的宏定義不是僅僅進行簡單的字串替換,還要進行引數替換。其定義的一般形式為;
#define 識別符號(宏名)(引數表) 字串
字串中包含在括號中所指定的引數。
擴充套件資料:
宏定義只佔編譯時間,函式呼叫則佔用執行時間(分配單元,儲存現場,值傳遞,返回),每次執行都要載入,所以執行相對宏定義會較慢。
使用宏定義次數多時,宏定義展開後源程式很長,因為每展開一次都使程式增長,但是執行起來比較快一點(這也不是絕對的,當有很多宏定義展開,目標檔案很大,執行的時候執行時系統換頁頻繁,效率就會低下)。而函式呼叫不使源程式變長。