函式是c語言中乙個重要的部分,相信大部分的人都有所了解。那麼我就來介紹巨集。
巨集:#define機制包括了乙個規定,允許把引數替換到文字中,這種現象通常稱為巨集(macro)或定義巨集(define macro)。
下面是巨集的宣告方式:
#define name( parament-list ) stuff
其中的parament-list是乙個由逗號隔開的符號表,他們可能出現在stuff中。
注意:引數列表的左括號必須與name相鄰。
如果兩者之間由任何空白,引數列表就會被解釋為stuff的一部分。
巨集和函式的對比
1.巨集不關心資料型別,巨集做的只是簡單的字串的替換,而函式是引數的傳遞,引數有資料型別。
2.巨集的引數替換是直接替換的,不做任何計算,而函式呼叫是將實參的值(經過計算)傳給形參。
3.巨集在預編譯階段被替換,而函式是在編譯之後被呼叫。
4.巨集不能定位,而函式可以。
5.巨集不能除錯,而函式可以。
6.巨集不占用記憶體空間,只做字串的替換,而函式占用記憶體,因為函式呼叫是引數間的傳遞。
7.巨集沒有返回值,直接執行,效率較高,而函式呼叫既要儲存現場,又要跳轉到另乙個函式呼叫中去執行,然後還要返回,所以效率較低。
8.巨集每次執行時,都有乙份巨集定義的**插入到程式中,**過長,浪費空間,而函式執行只需乙份,節省空間。
9.巨集可能會帶來運算子優先順序的問題,導致程式容易出錯,而函式不會。
10.巨集引數可以傳遞型別,而函式不可以。
舉個例子:
#define malloc(num,type)\
(type *)malloc(num * sizeof(type))
...//使用
malloc(10,int);//型別作為引數
//預處理替換之後
(int *)malloc(10 * sizeof(int));
C語言學習筆記一(巨集和常量)
1 判斷預處理命令是否被定義 ifdef symbol statements endif舉例 ifndef toupper define toupper endif2 進行if else預處理 ifdef symbol statements else other statements endif舉例...
C語言學習筆記 巨集定義
define 叫做巨集定義命令,它也是c語言預處理命令的一種。所謂巨集定義,就是用乙個識別符號來表示乙個字串,如果在後面的 現了該識別符號,那麼就全部替換成指定的字串。巨集定義是由源程式中的巨集定義命令 define完成的,巨集替換是由預處理程式完成的。define 巨集名 字串 表示這是一條預處理...
C語言學習總結
1 c語言中有乙個賦值表示式,是其他多數高階語言中沒有的。2 c 語言的輸入與輸出操作是由函式來完成的,它不提供輸入輸出語句。3 c語言中有乙個共用體,其變數所點記憶體長度是其最長 成員變數的長度。4 static char a language char p a 8 5 void main int...