帶引數巨集和函式之間的區別

2021-06-04 14:35:08 字數 386 閱讀 9494

@@ 帶引數的巨集,一般形式如下:

#define   巨集名(參數列)    字串

在函式中使用此巨集的時候,除了進行簡單的字串替換外,還要進行引數替換。如:

#define   add(x, y)    x + y

z = add(a, b);      /* 此句在函式內部 */

預處理後為:z = a + b;

具體檢視方法就是檢視預處理結果:$ gcc -e test.c -o test.i

@@ 帶引數的巨集與函式非常類似,在引用函式的時候也是在函式名後的括號內寫引數,而且要求實參的數目/型別都要和形參相同。但是他們也是有區別的:

@@ 另:巨集定義不是c語句,結尾不必加分號。

no pains, no gains!

帶引數的巨集與函式的區別

1.函式呼叫時,先求出實參表示式的值,然後帶入形參。而使用帶參的巨集只是進行簡單的字元替換。2.函式呼叫是在程式執行時處理的,分配臨時的記憶體單元 而巨集展開則是在編譯時進行的,在展開時並不分配記憶體單元,不進行值的傳遞處理,也沒有 返回值 的概念。3.對函式中的實參和形參都要定義型別,二者的型別要...

帶引數的巨集與函式的不同

define pi 3.1415926 define s r pi r r 1 函式呼叫時,先求出實參表示式的值,然後代入形參,而使用帶引數的巨集只是進行簡單的字元替換。例如s a b 在巨集展開時並不求a b的值,而只將實參字元 a b替換形參r 2 函式呼叫是在程式執行時處理的,為形參分配臨時的...

inline和巨集之間的區別

inline函式是c 引入的機制,目的是解決使用巨集定義的一些缺點。1.為什麼要引入內聯函式 內聯函式的作用 用它替代巨集定義,消除巨集定義的缺點。巨集定義使用預處理器實現,做一些簡單的字元替換因此不能進行引數有效性的檢測。另外它的返回值不能被強制轉換為可轉換的合適型別,且c 中引入了類及類的訪問控...