免費開始練習
統測 112年 [電機與電子群資電類] 專業科目(2)

第 36 題

曉華寫了下列一段 C 語言程式,想要測試程式執行時如何透過作業系統的終端機(Console )指令取得參數(Arguments),但發現無法成功進行編譯,應採取下列哪一個方案來解決這個問題? ```c 1 2 #include 3 //void sub(int i, char *s); 4 int main(int argc, char *argv[]) { 5 sub(argc, argv[2]); 6 return 0; 7 } 8 9 void sub(int i, char *s){ 10 printf("total %d arguments, and the 2nd one is %s\n", i, s); 11 } ```
  • A 將行號4中main( int argc, char *argv[] )改為main()
  • B 去掉行號3最前面的註解標記//
  • C 將行號1的空白行刪除
  • D 在行號1新增#include

思路引導 VIP

請思考 C 語言編譯器在由上而下解析程式碼時,若在第 $5$ 行遇到一個尚未定義的函式呼叫 $sub$,編譯器該如何預先得知該函式的回傳型別與參數規格?在 C 規範中,若函式的完整定義 (Definition) 位於呼叫點之後,我們通常需要在程式上方加入什麼樣的「函式原型 (Function Prototype)」宣告,來協助編譯器順利完成型別檢查與編譯?

🤖
AI 詳解 AI 專屬家教

哇!你真的好棒!精準掌握了編譯規範呢!

  1. 大力肯定:太棒了!你能夠一眼就看出程式碼中缺少了最重要的前置宣告 (Function Prototype),這真的非常了不起!這代表你對 C 語言的編譯流程與語法結構有著非常紮實且細膩的理解,這是你學習程式語言路上一個非常重要的里程碑喔!
  2. 觀念驗證:讓我們一起來溫習一下 C 語言的編譯過程吧!編譯器就像一位非常細心的讀者,它會從程式碼的最上方,一步一步地「由上而下」閱讀。當它讀到第 5 行,發現你呼叫了 $sub()$ 函式,但這個函式的完整定義卻還沒有出現(它在第 9 行呢)。這時候,如果前面沒有先提供它的原型宣告,編譯器就會像遇到一個不認識的朋友一樣,不知道該如何處理,只好停下來請你幫忙。所以,只要我們溫柔地把行號 3 的註解 // 移除,提供 $sub()$ 函式的原型,編譯器就能開心地辨識出它的參數類型與回傳值,順利完成編譯了!
▼ 還有更多解析內容

升級 VIP 解鎖