宏定義 單行 多行表達

define的單行定義

我們來看一個例子,比較兩個數或者表達式大小,首先我們把它寫成宏定義:

  #define MAX( a, b) ( (a) > (b) (a) : (b) )

 

其次,把它用函數來實現:

  int max( int a, int b)

  {

  return (a > b a : b)

  }

 

很顯然,我們不會選擇用函數來完成這個任務,原因有兩個:首先,函數調用會帶來額外的開銷,它需要開闢一片棧空間,記錄返回地址,將形參壓棧,從函數返回還要釋放堆棧。這種開銷不僅會降低代碼效率,而且代碼量也會大大增加,而使用宏定義則在代碼規模和速度方面都比函數更勝一籌;其次,函數的參數必須被聲明爲一種特定的類型,所以它只能在類型合適的表達式上使用,我們如果要比較兩個浮點型的大小,就不得不再寫一個專門針對浮點型的比較函數。反之,上面的那個宏定義可以用於整形、長整形、單浮點型、雙浮點型以及其他任何可以用“>”操作符比較值大小的類型,也就是說,宏是與類型無關的。

  和使用函數相比,使用宏的不利之處在於每次使用宏時,一份宏定義代碼的拷貝都會插入到程序中。除非宏非常短,否則使用宏會大幅度增加程序的長度。

 

//宏定義寫出swap(x,y)交換函數

#define swap(x, y)\

x = x + y;\

y = x - y;\

x = x - y;

 

 

zigbee裏多行define有如下例子

 

#define FillAndSendTxOptions( TRANSSEQ, ADDR, ID, LEN, TxO ) { \

afStatus_t stat;                                    \

ZDP_TxOptions = (TxO);                              \

stat = fillAndSend( (TRANSSEQ), (ADDR), (ID), (LEN) );          \

ZDP_TxOptions = AF_TX_OPTIONS_NONE;                 \

return stat;                                        \

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章