C語言學習總結 巨集和函式

2021-08-20 07:16:59 字數 1017 閱讀 8239

函式是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...