函數和宏函數的區別

某一個功能可以用函數來實現,也可以用宏定義函數來實現,如下宏函數實現比較大小功能:

#define    MAX(A,B)    {(A)>(B)?(A):(B)}

同樣的功能也可以使用以下函數來實現:

int Max(int a,int b)
{
    if(a>b)
        return a;
    else
        return b;
}

那麼他們的主要區別就在於:宏函數佔用大量的空間,函數佔用的時間;

因爲宏函數的使用不是調用的形式而是直接嵌入到當前的代碼中的,假設某一個宏函數佔用的代碼量是10Byte,那麼使用10次就佔用了100Byte的空間;

而函數的使用是調用的形式,其佔用的空間與使用次數無關,但調用就涉及程序的跳轉,跳轉就需要保存現場和恢復現場,這些都是需要佔用CPU時間的;

另外用宏函數還有個好處就是可以提升代碼穩定性,因爲使用宏函數不涉及跳轉,跳轉得少了在跳轉時跑飛的機率就小了;以及跳轉時需要保存和恢復現場,即入棧和出棧操作,少跳轉則棧出錯的概率也小了。還有就是對於在多個線程頻繁調用的函數功能,使用宏函數也避免了多個線程同時調用導致出錯的問題。

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