巨集和函式的區別

2021-07-31 04:46:45 字數 1027 閱讀 6497

巨集和函式的區別;

c語言中,巨集的用處也是十分廣泛,巨集是一種規則或模式,或稱語法替換 ,這種替換在預編譯時進行,稱作巨集展開。

而函式函式就是一系列c語句的集合,為了完成某個會重複使用的特定功能。需要該功能的時候,直接呼叫該函式即可巨集和函式功能上有相同點,但是也有許多差異,在不同的場合做合適的選擇,是我們希望的,為此我們看兩個例子:

例子1:

在兩個數中找出較大的乙個。

#include

#define max(a, b) a>b?a:b

int main()

很明顯,這個例子我們用巨集更好,因為簡單

例子2:

申請乙個10個整型大小的空間

#define malloc(num, type)\

(type *)malloc(num * sizeof(type))

//使用

malloc(10, int);//型別作為引數

//預處理器替換之後:

(int *)malloc(10 * sizeof(int));

類似於這樣功能的例子,明顯用巨集更好,函式引數沒辦法只有型別

例子3:

#define max(a, b) ( (a) > (b) ? (a) : (b) )

...x = 5;

y = 8;

z = max(x++, y++);

printf("x=%d y=%d z=%d\n", x, y, z);

明顯,這個例子用巨集的話,會產生***,改變了原來的值

因此c語言中,對於巨集和函式,我們應該區別二者的差異,以及注意使用場合:

1.相比函式,巨集的優勢

(1)巨集比函式在程式規模和速度方面更勝一籌(因為函式的呼叫,返回都有開銷)

(2)巨集與型別無關,使用範圍更廣

2.相比函式,巨集的劣勢

(1)每次呼叫巨集時,乙份巨集定義將插入到程式,除非巨集特別短,否則會大幅度增加程式長度

(2)巨集沒法除錯

(3)巨集與型別無關,不夠嚴謹

(4)巨集會因為運算子優先順序問題,導致錯誤

巨集和函式的區別

巨集定義又稱巨集代替,巨集替換,其宣告方式為 define name parameter list stuff。其中,parameter list 引數列表 是乙個有逗號分隔的符號列表,它們可能出現在stuff中。必須注意的是,引數列表的左括號必須與name緊密相連,如果兩者之間有任何空格存在,則引...

巨集和函式的區別

巨集非常頻繁的運用於執行簡單的計算。那麼,為什麼不用函式呢?1.巨集在使用時比函式在程式的規模和速度更勝一籌。2.函式的引數必須申明為乙個特定的型別,於是它只能在型別合適的表示式使用。而巨集為無型別替換。而有些情況只能用巨集,就是按型別申請空間時。如 define malloc n,type typ...

巨集和函式的區別

語言學習過程中,我們總會使用函式和巨集,以提高 可讀性,而要想更好的使用它們,就得了解清楚巨集和函式的區別,下面我們就來細數一下巨集和函式到底有什麼不同 1.長度不同。當執行程式時,在預處理階段,巨集 被插入到程式中,使程式的長度大幅度增長,下面這個例子是在只有乙個巨集的情況下 include de...