關於新舊式 標頭檔案

2021-10-08 11:48:49 字數 1634 閱讀 7480

c++ 引入了命名空間的概念,計畫重新編寫庫,將類、函式、巨集等都統一納入乙個命名空間,這個命名空間的名字就是std。std 是 standard 的縮寫,意思是「標準命名空間」。

但是這時已經有很多用老式 c++ 開發的程式了,它們的**中並沒有使用命名空間,直接修改原來的庫會帶來乙個很嚴重的後果:程式設計師會因為不願花費大量時間修改老式**而極力反抗,拒絕使用新標準的 c++ **。

c++ 開發人員想了乙個好辦法,保留原來的庫和標頭檔案,它們在 c++ 中可以繼續使用,然後再把原來的庫複製乙份,在此基礎上稍加修改,把類、函式、巨集等納入命名空間 std 下,就成了新版 c++ 標準庫。這樣共存在了兩份功能相似的庫,使用了老式 c++ 的程式可以繼續使用原來的庫,新開發的程式可以使用新版的 c++ 庫。

為了避免標頭檔案重名,新版 c++ 庫也對頭檔案的命名做了調整,去掉了字尾.h,所以老式 c++ 的iostream.h變成了iostream,fstream.h變成了fstream。而對於原來c語言的標頭檔案,也採用同樣的方法,但在每個名字前還要新增乙個c字母,所以c語言的stdio.h變成了cstdio,stdlib.h變成了cstdlib。

需要注意的是,舊的 c++ 標頭檔案是官方所反對使用的,已明確提出不再支援,但舊的c標頭檔案仍然可以使用,以保持對c的相容性。實際上,編譯器開發商不會停止對客戶現有軟體提供支援,可以預計,舊的 c++ 標頭檔案在未來數年內還是會被支援。

舉個例子

小結

舊的 c++ 標頭檔案,如 iostream.h、fstream.h 等將會繼續被支援,儘管它們不在官方標準中。這些標頭檔案的內容不在命名空間 std 中。

新的 c++ 標頭檔案,如 iostream、fstream 等包含的基本功能和對應的舊版標頭檔案相似,但標頭檔案的內容在命名空間 std 中。

注意:在標準化的過程中,庫中有些部分的細節被修改了,所以舊的標頭檔案和新的標頭檔案不一定完全對應。

標準c標頭檔案如 stdio.h、stdlib.h 等繼續被支援。標頭檔案的內容不在 std 中。

具有c庫功能的新c++標頭檔案具有如 cstdio、cstdlib 這樣的名字。它們提供的內容和相應的舊的c標頭檔案相同,只是內容在 std 中。

可以發現,對於不帶.h的標頭檔案,所有的符號都位於命名空間 std 中,使用時需要宣告命名空間 std;對於帶.h的標頭檔案,沒有使用任何命名空間,所有符號都位於全域性作用域。這也是 c++ 標準所規定的。

不過現實情況和 c++ 標準所期望的有些不同,對於原來c語言的標頭檔案,即使按照 c++ 的方式來使用,即#include 這種形式,那麼符號可以位於命名空間 std 中,也可以位於全域性範圍中

#include

intmain()

#include

intmain()

#include

intmain()

關於標頭檔案

自定義標頭檔案通常放在使用該標頭檔案的原始檔所在的目錄中,並使用 include myhead.h 來包含。標頭檔案是不編譯的,因為c語言編譯過程之前有個預編譯過程。在這個過程中用標頭檔案中的內容替換原始檔中 include 命令,所以在編譯器看來,沒有標頭檔案,只有原始檔。預編譯過程還包括條件編譯...

關於time h標頭檔案

編輯 1 2 3 4 5 6 7 8 include include intmain 編輯 time t time time t timer 得到從標準計時點 一般是1970年1月1日午夜 到當前時間的秒數。clock t clock void 得到從程式啟動到此次 函式呼叫時累計的毫秒數。編輯 函...

關於unistd標頭檔案

unistd.h 是 c 和 c 程式語言中提供對 posix 作業系統 api的訪問功能的 標頭檔案的名稱。該標頭檔案由 posix.1 標準 單一unix規範的基礎 提出,故所有遵循該標準的作業系統和 編譯器均應提供該標頭檔案 如 unix 的所有官方版本,包括 mac os x linux 等...