如何用 define巨集定義多行函式

2021-09-22 09:55:31 字數 1282 閱讀 4694

在軟體開發過程中,經常有一些常用或者通用的功能或者**段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。

首先,函式呼叫會帶來額外的開銷,它需要開闢一片棧空間,記錄返回位址,將形參壓棧,從函式返回還要釋放堆疊。這種開銷不僅會降低**效率,而且**量也會大大增加,而使用巨集定義則在**規模和速度方面都比函式更勝一籌;其次,函式的引數必須被宣告為一種特定的型別,所以它只能在型別合適的表示式上使用,我們如果要比較兩個浮點型的大小,就不得不再寫乙個專門針對浮點型的比較函式。反之,上面的那個巨集定義可以用於整形、長整形、單浮點型、雙浮點型以及其他任何可以用「>」操作符比較值大小的型別,也就是說,巨集是與型別無關的。

和使用函式相比,使用巨集的不利之處在於每次使用巨集時,乙份巨集定義**的拷貝都會插入到程式中。除非巨集非常短,否則使用巨集會大幅度增加程式的長度。

下面一段**的功能是顯示c整數型別的長度和範圍:

#include#define range(type, name)                         \

\else                                       \\\

maxval=minval-1;/*roll over backwards!*/   \

\printf("%20s(%2u bits):",name,bits);       \

printf(format,(long)minval);                \

printf("to");                               \

printf(format,(long)maxval);                \

printf("\n");                               \

}                     

int main()

程式執行結果如下:    

說明:1、使用#define宣告多行巨集函式與宣告單行巨集函式沒有本質區別;

2、多行宣告時,回車換行前要加上字元『\』,即「\[enter]」,注意字元『\』後要緊跟回車鍵,中間不能有空格或其他字元。

3、另外,在linux作業系統中 「\[enter]」稱為跳脫字元,意思是一行寫不完的時候可以使用跳脫字元換行,但對於作業系統而言,它認為你並沒有換行。

define進行多行巨集定義

define進行多行巨集定義 define dorecovery led run 1 val1 off val2 off pump off val3 on compre on define str output format v0 s s s n printf str output format v...

define巨集定義

預處理指令 以 開頭的行,都預處理指令,用於指示編譯器做一些預處理工作。比如 include h 注 預處理指令不是語句,行尾不要加分號 define的兩種用法 1.定義乙個 數值 2.定義乙個 算式 注 工程中應該避免使用這兩種方式 定義乙個值 define pi 3.14 int main 定義...

巨集定義 define

巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨集名替換為字串。1 define printx printf d n x 在c程式中,以 字元開頭的 都是一條c預處理器語句。預...