@@ 帶引數的巨集,一般形式如下:
#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 中引入了類及類的訪問控...