# 2020進階電腦時做 quiz6-02 先備知識 ## 比較 macro 與 function 的優劣點 巨集與函數的功能相同,但在編譯時,編譯時會以巨集取代原來的敘述,而函數則是一個跳躍敘述;在程式執行期間,由於巨集已經展開為它所代表的敘述,程式會一行一行執行下去,而碰到函數則是跳到函數定義的副程式去執行。所以,如果將子功能以巨集撰寫,執行速度較快,但編譯後的程式碼較大;函數寫法則執行速度較慢,但是執行檔較小,如何取捨完全看程式設計的目的與需求。 **巨集 (macro)** 優點:執行速度快,沒有堆疊的 push 和 pop 動作的需要,減少時間的耗損。 缺點:巨集被呼叫多次以後,會耗損存放及使用大量的記憶體空間。 **函數 (call function/call subroutine)** 優點:即使函數被呼叫多次,在記憶體中仍只有一份實體,較節省記憶體空間。能節省存放及使用的記憶體空間。 缺點:執行速度較慢,需花費時間在堆疊的 push 和 pop 動作上。 [建議導讀](https://dotblogs.com.tw/Ace_Dream/2016/01/16/function_macro) ## [Dangling else](https://en.wikipedia.org/wiki/Dangling_else) ```c if a then s if b then s1 else s2 ``` 以上的 if-else 非常的明確也不會讓人或編譯器產生不確定性 ```c if a then if b then s else s2 ``` 但是如果這樣寫 ```c 1. if a then (if b then s) else s2 2. if a then (if b then s else s2) ``` 就會有這兩種解釋方法,產生不確定性 ###### tags: `進階電腦系統應用2020`