1. 程式人生 > >巨集函式和函式的區別及其優缺點

巨集函式和函式的區別及其優缺點

巨集定義,編譯預處理指令,在編譯預處理時即進行簡單的字元替換,也只進行簡單的字元替換。而巨集定義的函式和使用者定義的函式在使用時有什麼區別?如下:

1.巨集函式會在編譯預處理時展開,只佔編譯時間,函式呼叫則會佔用執行時間(分配單元,儲存現場,值傳遞,返回),每次執行都要載入,所以執行相對巨集會較慢。

2.在函式呼叫時,先求出實參表示式的值,然後帶入形參。而使用帶參的巨集只是進行簡單的字元替換。

3.函式呼叫是在程式執行時處理的,分配臨時的記憶體單元;而巨集展開則是在編譯時進行的,在展開時並不分配記憶體單元,不進行值的傳遞處理,也沒有“返回值”的概念。

4.對函式中的實參和形參都要定義型別,二者的型別要求一致,如不一致,應進行型別轉換;而巨集不存在型別問題,巨集名無型別,它的引數也無型別,只是一個符號代表,展開時帶入指定的字元即可。巨集定義時,字串可以是任何型別的資料。

5.巨集函式的定義也有其缺點,它很容易會產生二義性,具體如下:

----------------------------------下在這邊↓-------------------------------------


我們程式的原意是求(2+2)*(3+3),結果為24,用函式執行得到了正確的結果。

而如果用巨集函式進行運算:


巨集函式只進行了簡單的字元替換,它將程式錯誤的展開成了2+2*3+3=11,因為運算順序的原因得到了錯誤的結果。