公務人員特種考試計算機大意106 年第 26 題單選題
下列敘述何者正確:
A編譯器可以找出程式中的語法錯誤(syntax errors)正確答案
B編譯器可以找出程式中的邏輯思考錯誤(logic errors)
C編譯器可以事先找出所有在程式執行時可能會發生的錯誤(run-time errors)
D編譯器負責把用低階機器指令撰寫的程式轉換成對應用高階程式語言撰寫的程式碼
A正確答案
編譯器只能抓語法錯誤,邏輯錯誤與執行期錯誤它抓不到;而且是把高階語言翻成低階,不是反過來。
為什麼答案是 A
編譯器在編譯期會檢查原始碼是否符合語言的語法規則,如缺少分號、括號不對稱、變數未宣告等語法錯誤,都會在此階段被抓出並回報。
載入中…
完整詳解
Pro · 無限重點 編譯器只能抓語法錯誤,邏輯錯誤與執行期錯誤它抓不到;而且是把高階語言翻成低階,不是反過來。
記口訣:編譯器只管『語法』,邏輯與 run-time 都要靠程式員自己除錯。
逐選項分析
A✓ 正確
編譯器在編譯期會檢查原始碼是否符合語言的語法規則,如缺少分號、括號不對稱、變數未宣告等語法錯誤,都會在此階段被抓出並回報。
B✕ 陷阱
邏輯錯誤(logic error)指程式能跑但結果不對,例如把加號寫成減號。這類錯誤語法完全合法,編譯器看不出來,只能靠測試與除錯找出。
C✕ 陷阱
執行期錯誤(run-time error)如除以零、陣列越界、記憶體不足等,須在程式真的跑起來、輸入資料進來時才會發生,編譯器無法事先預測所有可能的 run-time error。
D✕ 陷阱
方向顛倒!編譯器是把『高階語言』(C、Java 等)翻譯成『低階機器碼』,不是反過來。反過來從機器碼還原成高階語言那叫反組譯/反編譯(disassembler/decompiler)。
三種程式錯誤 vs 編譯器能否抓出
| 錯誤類型 | 發生時機 | 範例 | 編譯器能抓? |
|---|
| 語法錯誤 syntax error | 編譯期 | 缺分號、括號不對稱 | ✅ 可以 |
| 邏輯錯誤 logic error | 執行後結果錯 | 公式寫錯、條件反了 | ❌ 不行 |
| 執行期錯誤 run-time error | 程式執行中 | 除以零、陣列越界 | ❌ 不行 |
本題三個誘答選項都用『編譯器很萬能』的錯覺設陷阱:讓你以為編譯器能抓邏輯、能預測 run-time、甚至還能反向翻譯。記住:編譯器只是個『語法檢查+翻譯』工具,不會幫你思考邏輯,也不會預言未來執行會發生什麼事。