回覆列表
  • 1 # 阿拉河南人

    定義和宣告分開有什麼不好麼?

    再說了,cpp沒有說一定必須帶個標頭檔案啊,你可以只要一個頭檔案就可以,所有程式碼都寫在標頭檔案,和java一樣,想看一眼類的整體,就翻程式碼。 經典的cpp看這個只需要看標頭檔案即可,當給第三方開發的時候,只需要提供庫,和標頭檔案即可,不用擔心被反編譯。

  • 2 # alex136442470

    標頭檔案相對於C相當於介面,呼叫者不需要知道實現細節,只需要匯入標頭檔案就可以了。沒有標頭檔案用什麼規範介面呼叫?靠猜嗎?

  • 3 # 光明右使8787

    現在的C專案是把標頭檔案當作手冊來用,標頭檔案中對函式詳細說明,在IDE中一眼就能看出函式的引數和返回值是什麼。

    go就是學的C,但go中規範化了,不寫註釋編譯時會報警。

    標頭檔案在編譯時作用不大,在程式碼維護時起著決定性作用,沒有標頭檔案,根本不知道函式在哪個LIB中,函式的原型是什麼。

  • 4 # 仁見人愛

    1、有很多程式與程式設計師使用標頭檔案,可以想一下去掉標頭檔案影響有多大;java9、10為什麼是失敗版本,步調邁太大。改一個模組化,絕大多數程式碼要重構。道理相通。

    2、請想一下不用標頭檔案可以用什麼替換,不考慮非編譯語言,不得用如java的import效果還一樣,為什麼要去掉?

    3、縱觀各種編譯型語言的發展史,步調邁太大的,幾乎都流行不起來,如swift兩個版本語言規範不相容。雖然編譯器開源,沒人幫發展。

    4、對比各種成功語言,規範修改在於增強功能,增強特性,彌補語言缺陷。並不是拋棄已經寫好的程式碼,拋棄已經學會前一版本的程式設計師。兩方面量都很大,軟體發展左右語言發展。這條才是至關重要,能維持生態,才能保持語言持續發展。C,C plus,java的不可撼動地位都遵循這規律。

    5、最後,重複,可以參考java9、10的改動,至今幾乎沒人用在生產環境。swift本可以大展拳腳,就因蘋果奇葩思維,不向後相容,至今蘋果自己的系統用作程式語言,難以大範圍推廣。兩個都是程式語言設計的反面教材。

  • 5 # IT之州

    當程式編譯進入第一個階段,預處理,預處理器在C/C++程式碼標頭檔案處插入標頭檔案所指向的程式碼,使得在接下來的編譯獲得完整的程式碼加以處理。

    以上得知,C/C++語言的標頭檔案起到了兩個作用。第一,封裝。封裝了標頭檔案的程式碼,使其得以被其他程式方便呼叫。第二,明確程式碼呼叫關係。

    假如編譯器試圖透過某些手段去除標頭檔案,那麼必須要從程式碼中推斷出引用程式碼的出處。請看一個簡單的C++語言程式, helloworld.cpp

    int main() {

    cout << "hello, world\n";

    printf("hello, world\n");

    }

    編譯器在helloworld.cpp中,找不到cout和printf的定義。怎麼辦?啊,簡單,讓編譯器去標準庫裡找不就是了,cout 在iostram裡定義,printf在cstdio中。你知道,C/C++標準庫很龐大,每次編譯時要去蠻力搜尋查詢,時間上很昂貴,除非事先做了加速處理,然而引入了更多的工程問題。

    好,那麼我們多加兩行程式碼

    int main() {

    cout << "hello, world\n";

    printf("hello, world\n");

    Person dmr("Dennis", "Ritchie");

    cout << dmr.last_name() << endl;

    }

    問題來了。程式碼中沒有Person類的定義。怎麼辦?去哪裡找?我們必須告訴編譯器,不然它只能在系統裡去蠻力查詢,時間上很昂貴,而且可能找錯,畢竟也許有多個檔案定義Person類呢!所以我們必須在原始碼裡標註出。繞了一圈,不是回到起點了,那不就是標頭檔案嗎?

    為了省掉標頭檔案或者在標頭檔案處理上加上很多控制,從編譯效率和程式碼可讀性上,投入和收益比,沒有明顯提升,甚至下降。於是,C/C++標頭檔案成了現實的工程選擇。

    更多精彩文章和回答,請關注

  • 中秋節和大豐收的關聯?
  • 考研數三張宇八套卷基本二三十分,但又不想放棄考研怎麼辦?