# 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`