全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:845
推到 Plurk!
推到 Facebook!

關於型態或變數的可見度

尚未結案
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-24 11:29:50 IP:211.21.xxx.xxx 未訂閱
在 bcb 中,若我將一個(或一堆)結構宣告放在 Unit3 中 若 unit1 include unit2 , 而 unit2 再 include unit3 則 unit1 就可"看到"到 unit3 中的結構或變數(unit1 不用直接 include unit3) 但在 Delphi 中 要讓 unit1 '看到' unit3 , 除了直接 uses unit3 外似乎無別的辦法 , 我不能用間接的方法如 unit2 先 uses unit3 , 而 unit1 只要 uses unit2 即可"看到"到 unit3 中的結構或變數 ?? 我找過資料 delphi 中也可用編譯命令使用 include 檔 如在 unit2 中使用 {$I unit3.pas} 這樣 unit3 就變成 unit2 的一部份 (這跟 unit2 直接 uses unit3 意義不太一樣) 當 unit1 只要 uses unit2 時,就可見到 unit3 的內容 不過 unit3 中不能有 unit , interface 以及 implementation 這些完整 pas 檔案結構的宣告(會出現 'Declaration expected but 'UNIT' found' 的錯誤) 但是 unit3.pas 不是我維護的,檔案中也必須有 unit , interface 以及 implementation 這些完整 pas 檔案結構的宣告 但我要從 unit1 看見 unit3 真的除了直接 uses 外沒真的別的辦法了嗎 ? (我希望 unit1 -> unit2 -> unit3 , 而 unit1 可看見 unit3 中的東西)
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-24 18:05:47 IP:203.203.xxx.xxx 未訂閱
當然 因為編譯器所使用的技術不一樣 C 是將所有 include 的東東,在編譯時期就加以整理,並整理出相關的 addressing 而 pascal 是指去整理所使用的 unit 的 addressing ,而採用相對的方式,這樣沒被使用的就沒有辦法被知道 至於那個好?則各有千秋 妳不用擔心在各個 unit 都用到 unit3 ,會造成重複將 unit3 編譯,與產生重複的碼造成程式肥大,因為最後只會有一份 unit3,只是有使用的有連結,而沒使用的沒有連結而已 但若是妳用 {$I unit3.pas} 則會造成每一個有引用的 unit 都含有一份 unit3 的程式碼,但編譯器並不認為那是引用的 Unit3 而認為那是該 unit 的一部份,這樣就會造成重複編譯與產生重複的目的碼! {$I unit3.pas}代表的是將 unit3 的內容加入,而不是引用喔! 所以你的希望是不可能的 再說只不過是一個 "uses unit3 的敘述",跟 "unit3 不是妳維護的",根本沒關係 這是編譯器的特性,除非將來改了,不然就只有接受他,或不用他
系統時間:2024-05-03 4:15:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!