2.函數調用是在程序運行時處理的,分配臨時的內存單元;而宏展開則是在編譯時進行的,在展開時並不分配內存單元,不進行值的傳遞處理,也沒有“返回值”的概念。
3.對函數中的實參和形參都要定義類型,二者的類型要求一致,如不一致,應進行類型轉換;而宏不存在類型問題,宏名無類型,它的參數也無類型,只是一個符號代表,展開時帶入指定的字符即可。宏定義時,字符串可以是任何類型的數據。
4.調用函數只可得到一個返回值,而用宏可以設法得到幾個結果。
5.使用宏次數多時,宏展開後源程序長,因爲每展開一次都使程序增長,而函數調用不使源程序變長。
6.宏替換不佔運行時間。而函數調用則佔運行時間(分配單元、保留現場、值傳遞、返回)。