原住民族考試四等考試-電子工程類科計算機概要106 年第 27 題單選題
在 C 語言中可以定義巨集(Macro),有關巨集的敘述,下列何者錯誤?
A與函數相比,使用巨集所生成的程式碼執行較快速
B與函數相比,使用多次巨集所生成的程式碼大小比較小正確答案
C使用巨集可以提高程式可讀性
D巨集不牽涉程式控制權的移轉
B正確答案
巨集是編譯前文字替換,每次使用都展開一次,程式碼會變大不會變小。
為什麼答案是 B
錯誤!巨集每出現一次就被複製展開一次,使用越多次程式碼越大;函數才是共用一份程式碼、體積較小。本題要選的就是這個錯誤敘述。
載入中…
完整詳解
Pro · 無限重點 巨集是編譯前文字替換,每次使用都展開一次,程式碼會變大不會變小。
巨集=複製貼上,用越多次程式越肥;函數才是共用同一份程式碼。
逐選項分析
A✕
巨集在前置處理階段直接展開,沒有函數呼叫的堆疊操作與跳躍成本,執行速度較快,敘述正確。
B✓ 正確
錯誤!巨集每出現一次就被複製展開一次,使用越多次程式碼越大;函數才是共用一份程式碼、體積較小。本題要選的就是這個錯誤敘述。
C✕
用有意義的名稱取代複雜算式或常數(如 #define PI 3.14159),確實能提升可讀性,敘述正確。
D✕
巨集只是文字替換,不像函數需要 call/return 轉移控制權與堆疊切換,敘述正確。
巨集 vs 函數 對照表
| 比較項目 | 巨集 Macro | 函數 Function |
|---|
| 處理時機 | 前置處理(編譯前) | 執行期呼叫 |
| 運作方式 | 文字替換、原地展開 | 控制權轉移、堆疊呼叫 |
| 執行速度 | 較快(無呼叫成本) | 較慢(有呼叫成本) |
| 程式碼大小 | 用越多次越大 | 共用一份、較小 |
| 型別檢查 | 無 | 有 |
考生容易把「執行快」誤記成「程式碼也小」,其實兩者是 trade-off:巨集用空間(展開重複程式碼)換時間(省呼叫成本)。記住「巨集=複製貼上,貼越多越肥」就不會錯。