當程序編譯進入第一個階段,預處理,預處理器在C/C++代碼頭文件處插入頭文件所指向的代碼,使得在接下來的編譯獲得完整的代碼加以處理。
以上得知,C/C++語言的頭文件起到了兩個作用。第一,封裝。封裝了頭文件的代碼,使其得以被其他程序方便調用。第二,明確代碼調用關系。
假如編譯器試圖通過某些手段去除頭文件,那么必須要從代碼中推斷出引用代碼的出處。請看一個簡單的C++語言程序,helloworld.cpp
intmain(){
cout<<"hello,world\n";
printf("hello,world\n");
}
編譯器在helloworld.cpp中,找不到cout和printf的定義。怎么辦?啊,簡單,讓編譯器去標準庫里找不就是了,cout在iostram里定義,printf在cstdio中。你知道,C/C++標準庫很龐大,每次編譯時要去蠻力搜索查找,時間上很昂貴,除非事先做了加速處理,然而引入了更多的工程問題。
好,那么我們多加兩行代碼
intmain(){
cout<<"hello,world\n";
printf("hello,world\n");
Persondmr("Dennis","Ritchie");
cout<<dmr.last_name()<<endl;
}
問題來了。代碼中沒有Person類的定義。怎么辦?去哪里找?我們必須告訴編譯器,不然它只能在系統里去蠻力查找,時間上很昂貴,而且可能找錯,畢竟也許有多個文件定義Person類呢!所以我們必須在源代碼里標注出。繞了一圈,不是回到起點了,那不就是頭文件嗎?
為了省掉頭文件或者在頭文件處理上加上很多控制,從編譯效率和代碼可讀性上,投入和收益比,沒有明顯提升,甚至下降。于是,C/C++頭文件成了現實的工程選擇。
有幫助,請點贊。
更多精彩文章和回答,請關注
微信公眾號:IT之州
今日:IT之州
新浪微博:IT之州