天天看點

C++頭檔案中為什麼有些要加h

.h的是标準C的頭檔案,沒有.h的是标準C++的頭檔案,兩種都是頭檔案。

造成這兩種形式不同的原因,是C++的發展曆史決定的,剛才正好有别的人也問這個問題,這裡我再回答一下(注意vs2008和vs2005對标準C++的支援是一樣的):

以iostream和stdio.h為例,iostream是C++的庫,stdio.h是标準C的庫。

2、新的C++标準摒棄了.h形式的頭檔案,是以在vs2005裡面是沒有iostream.h的頭檔案的。

3、 在早期的vs版本,比如VC6.0,用的還是老版本的C++标準庫,例如iostream.h,并且當時标準庫也沒有引入名字空間。是以直 接#include<iostream.h>是可以的。但到了vs2005,使用了新的C++标準庫,隻能 用#include<iostream>。

4、名字空間裡可以包含很多東西,比如函數名、辨別符、資料類型等等。新的C++标準把标 準庫中的名字都放入了std名字空間,是以在#include<iostream>之後,還必須使用标準庫的名字空間std,才能使用标準庫 裡的類和函數,也就是必須usingnamespacestd;

5、對于C的标準庫,例如,stdio.h,沒有名字空間的概念,是以直接包含後即可使用。

6、 新的C++标準庫為了統一以前的C标準庫,将原來c的标準庫也放入了std名字空間,并把原來的C标準庫去掉了.h字尾,前面加上字母“c”,例如 stdio.h就變成了cstdio,使用時為#include<cstdio>,其内容和#include<stdio.h> 相同,但是要額外使用名字空間std,也就是usingnamespacestd;

7、是以,對于新的C++标準庫,沒有了.h形式的頭檔案,例 如iostream,在包含了頭檔案以後,必須使用std名字空間才能使用庫中的内容。對于C标準庫,有兩種使用方法,一種是用老的.h形式,例如 stdio.h直接包含就可以了;另一種就是用C++的統一形式,例如cstdio,和C++标準庫一樣,包含了以後還要加上 usingnamespacestd;才能使用。

8.頭檔案用尖括号即<>與用雙撇号""的差別,用<>時,系統到存放 在C/C++C庫函數頭檔案的目錄中尋找要包含的檔案,這稱為标準方式,用""時,系統先在使用者目前目錄中尋找要包含的檔案,若找不到,再按标準方式查 找。一般來說,如果要用到庫函數而包含相關的頭檔案,則用<>,如果要包含的是使用者自己編寫的檔案,一般用"",若檔案不在目前目錄中, 在""内應該給出檔案路徑,例如:#include"C:\wang\aa.ha"。

建議采用後面統一的形式,比如你要同時使用C和C++的庫,可以這樣寫:

#include<cstdio>

#include<iostream>

usingnamespacestd;