在C/C++學習筆記(六)中記錄了頭檔案和源檔案的探讨,本文将繼續探讨更多的相關知識。
#include <>和#include “”的差別
當我們使用#include <檔案名>指令時,編譯器就到這個檔案夾裡去找對應的檔案。顯然,用這種寫法去包含一個我們自己編寫的頭檔案(不在那個Include檔案夾裡)就會出錯了。是以包含C++提供的頭檔案時,應該使用尖括号。
#include "檔案名"指令則是先在目前檔案所在的目錄搜尋是否有符合的檔案,如果沒有再到Include檔案夾裡去找對應的檔案。是以,無論這個檔案是C++提供的還是自己編寫的,使用#include "檔案名"指令一定是正确的。
.h檔案
.h檔案是c中的檔案,包括了操作C風格字元串的函數,如strcpy.strcmp,strcat,strlen等。C 語言裡沒有字元串這個資料類型,有的隻是字元指針或字元數組,C風格字元串也就是以'\0'結尾的字元序列。如下執行個體:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int _tmain(int argc, _TCHAR* argv[]) {
char d[20]="Golden Global";
char *s=" View";
strcat(d,s);
printf("%s\n",d);
getchar();
return 0;
}
新标準庫檔案
一般一個C++的老的帶“.h”擴充名的庫檔案,比如iostream.h,在新标準後的标準庫中都有一個不帶“.h”擴充名的相對應,差別除了後者的好多改進之外,還有一點就是後者的東東都塞進了“std”名字空間中。是以<string.h>是舊的C 頭檔案,對應的是基于char*的字元串處理函數;<string>
是包裝了std 的C++頭檔案,對應的是新的string 類(看下文)。是以c++中可以用<string.h>也可以用<string>,而c中隻能用<string.h>,一般說要用strcpy.strcmp,strcat,strlen之類的函數應該include <string.h>,要使用上一博文中介紹的string類應該include <string.h>,但是貌似<string>中已經有了include <string.h>,是以實際中隻需要include <string.h>,如下面執行個體:
#include "stdafx.h"
#include <string>
using namespace std ;
int _tmain(int argc, _TCHAR* argv[]) {
char d[20]="Golden Global";
char *s=" View";
string s1="hello";
strcat(d,s);
//strcat(s2,s);//此處報錯
printf("%s\n",d);
getchar();
return 0;
}
c字首檔案
在C++标準化之前,頭檔案有各種字尾名,如.h,.hpp,.hxx等,标準化之後規定頭檔案不帶字尾名,同時原來的C标準頭檔案都在前面加了個"c",于是原來C裡的string.h,在C++裡就變成了cstring,同樣的stdio.h,stdlib.h之類的都變成了cstdio、cstdlib一類。為了相容C,大部分C++編譯器都同時提供了這兩個版本的頭檔案,可以認為string.h和ctring是一回事,你可以看一下你的編譯器裡include目錄下的這兩個檔案,cstring隻是簡單的include了string.h而已。