阿摩線上測驗 登入

申論題資訊

試卷:100年 - 100 關務特種考試_四等_資訊處理:程式語言概要#27097
科目:程式語言
年份:100年
排序:0

題組內容

二、程式語言通常要求等號(assignment, =或:=)左右兩邊需要有相同的資料型態,檢查 資料型態是否相同的方法可分為靜態(static)和動態(dynamic)兩種方式,針對 以下敘述,判斷那些是對的?那些是錯的?並簡單說明其理由。(只有答案者不計 分)(20 分)

申論題內容

⑷若程式可以分成許多模組,分別在不同時間翻譯,例如 C 程式,則不管怎麼做, 採用靜態核對資料型態就無法完全核對資料型態是否相符。

詳解 (共 1 筆)

詳解 提供者:hchungw

靜態型態檢查的限制

靜態型態檢查在編譯時期進行,可以捕捉到許多型態錯誤。然而,在模組化程式設計中,由於不同模組可能在不同時間被編譯,這會引起一些問題,使得靜態型態檢查無法完全核對所有型態是否相符。

原因分析

  1. 分開編譯(Separate Compilation)

    • 在 C 語言中,程式通常會分成多個模組(例如多個 .c 檔案),每個模組可以獨立編譯成目標檔案(.o 或 .obj)。
    • 編譯每個模組時,編譯器只能檢查該模組內的型態一致性,而無法檢查不同模組之間的型態一致性。
  2. 外部宣告(External Declarations)

    • 在多個模組之間,共享資料或函數通常會通過 extern 關鍵字聲明。
    • 靜態型態檢查只能確保在同一個翻譯單元(translation unit)內型態一致,而無法跨翻譯單元進行全面檢查。例如,在模組 A 中宣告的外部變數,在模組 B 中可能會有不同的宣告型態,但編譯時無法檢查這種不一致性。
  3. 連結過程(Linking Process)

    • 連結器(Linker)在將各個編譯好的目標檔案連結成最終可執行檔時,無法進行詳細的型態檢查。它只確保符號(如變數和函數名)在各模組之間的一致性,但不檢查符號的型態。