C++中#include包含頭文件帶 .h 和不帶 .h 的區別

如 #include <iostream> 和 #include <iostream.h> 包含的東西有哪些不同?

        之前在寫C++程序的時候只知道使用 #include <iostream> 的時候,使用函數前要用 using namespace std; 導入命名空間,而 #include <iostream.h> 則不用,這個得看C++標準化過程爲C++開發者做了哪些有意義的工作。

C++標準化過程中,其中一個環節,解決了以下問題:

(1)C++增加了名稱空間概念,藉以將原來聲明在全局空間下的標識符聲明在了namespace std下。

(2)統一C++各種後綴名,如.h、.hpp、.hxx等。標準化之前的頭文件就是帶後綴名的文件,標準化後的頭文件就是不帶後綴名的文件。C++ 98 規定用戶應使用新版頭文件,對舊版本頭文件不在進行強制規範,但大多數編譯器廠商依然提供舊版本頭文件,以求向下兼容。

        也就是說帶 .h 的頭文件是舊標準的,如果想用新的標準的頭文件就不要帶 .h。

        另外,爲了和C語言兼容,C++標準化過程中,原有C語言頭文件標準化後,頭文件名前帶個c字母,如cstdio、cstring、ctime、ctype等等。這些頭文件都可以在C:\Program Files\Microsoft Visual Studio 10.0\VC\include這個目錄下找到(以VC2010爲例)。也就是說,我們如果要用C++標準化了的C語言頭文件,就得作如下的轉換

#include <stdio.h> --> #include <cstdio>
#include <stdlib.h> --> #include <cstdlib>
#include <string.h> --> #include <cstring>

        還要提及的一點是,我在看C++標準庫的時候,看到一個特殊情況 <memory.h> 和 <memory>,這兩個頭文件是完全不同的,因爲我發現 <memory.h>頭文件件包含了 <mem.h>;而 <memory> 包含 <memory.stl>

這裏摘錄 memory.h 中的一段代碼:

#if !defined(__cplusplus)
# include <mem.h>
#else /* __cplusplus */
# if !defined(__USING_STD_NAMES__)
# include <mem.h>
# else /* __USING_STD_NAMES__ */
# include <memory.stl>
# endif /* __USING_STD_NAMES__ */
#endif /* __cplusplus */
複製代碼
轉自http://www.cnblogs.com/mysunnyday/archive/2011/06/22/2087373.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章