很多初學(xué)朋友在看C程序開頭往往都是
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include… …
中的一個(gè)或幾個(gè)~,相信大家也知道這就是所謂的”包含頭文件”,每次我們都會這樣寫,那到底頭文件是什么,有何作用,又如何包含它?今天為大家揭開它!
(1)什么是頭文件?
我們以最簡單的hello world為例,代碼如下:
#include<stdio.h> int main() { printf(“hello world!\n”); return 0; }
這個(gè)程序就有一個(gè)文件包含。也就是stdio.h這文件,這是一個(gè)名字叫stdio,后綴為.h的文件,其實(shí)和我們在日常用的txt文本文件并無兩樣,都是我們能看懂的字符,只不過是英文而已,不信可以找到它看看,以VC6為例,可以找到VC6編譯器下VC6.0 完整綠色版\VC98\Include\目錄,即可看到stdio.h文件。
也可以直接在程序當(dāng)中,右鍵頭文件點(diǎn)擊打開,也可以直接打開stdio.h的內(nèi)容,如下圖:
打開stdio.h文件后,如下圖:
怎么樣,看到了嗎?這就是stdio.h的內(nèi)容,只不過英文而已!說白了,它其實(shí)和txt的文本文件差不多!只不過后綴名是.h而已!
這就是頭文件的真實(shí)面目!怎么樣,明白了嗎?
(2)頭文件的作用
那么看清之后,接下來我們來說一說,頭文件的作用吧
還是以hello world這個(gè)程序?yàn)槔?,相信很多朋友想過:明明就顯示一句話”Hello world”竟然足足寫了五六行代碼,而真正有用的可能就那句printf了,其他都是什么鬼,比如第一句那個(gè)#include<stdio.h> ,它是什么鬼?寫它有用嗎? 我刪了它一樣運(yùn)行顯示Hello world啊!
沒錯(cuò),在VC6環(huán)境下,即使Hello world這個(gè)程序去掉第一行的文件包含也就是#include<stdio.h>這句話程序仍然可以編譯成功并且運(yùn)行!但不同的是大家需要注意這個(gè)時(shí)候編譯是有一個(gè)警告的!
怎么樣?看懂了嗎? 是提示你printf這個(gè)函數(shù)沒有定義! (printf并不屬于C語言本身,不懂的同學(xué)請自行補(bǔ)腦),那難道加上#include<stdio.h>就算定義了嗎?答:是的
怎么講?因?yàn)樵趕tdio.h這個(gè)頭文件中有關(guān)于printf的定義,大家可以在打開stdio.h后搜索printf
這個(gè)就是關(guān)于printf的定義(仔細(xì)搜,因?yàn)榭赡軙训矫趾退愃频膄printf函數(shù))
可以這么打個(gè)比方:編譯器好比是你的管家,負(fù)責(zé)家(程序)的安全,一經(jīng)發(fā)現(xiàn)任何可疑的人員都禁止進(jìn)屋!而printf就這么被抓住了!你既然想讓它進(jìn)屋,能做的,就是提前告訴管家我要讓它進(jìn)來,也就是提前聲明??蓵r(shí)間一長,你發(fā)現(xiàn)有很多這樣的人想讓進(jìn)來,每次都一個(gè)個(gè)聲明太累了,索性就建立一個(gè)白名單,把想讓進(jìn)屋的人都寫進(jìn)去,都聲明起來,到時(shí)候讓管家看白名單得了!于是乎,就有了頭文件的樣子,也就是包含頭文件。#include<stdio.h>這句話。
但凡想用到誰,就包含含有誰的頭文件。
比如你用printf函數(shù)打印東西,那你就要包含stdio.h的頭文件
如果你用pow函數(shù)算多立方,那你就要包含math.h的頭文件
如果你要用strcmp函數(shù)接收一個(gè)字符,那你就要包含string.h的頭文件
…???????????????????????????????????????????????????????????? …
怎么樣,想明白了嗎?
(3)頭文件如何被包含?
最后,在看一個(gè)C語言是如何”包含”這些頭文件的,答案就是#include這個(gè)預(yù)處理命令!
所謂預(yù)處理,即可以在編譯器編譯之前,做一些預(yù)先要做的準(zhǔn)備工作,比如宏替換、展開等等,而包含頭文件其實(shí)也就是把頭文件里的內(nèi)容原封不動(dòng)的放到程序的最前面,僅此而已!
還不信?來動(dòng)手試試,依舊以Hello world為例
#include<stdio.h> int? main() { printf(“hello world!\n”); return 0; }
先刪除掉#include<stdio.h>這句話,然后將stdio.h中的內(nèi)容復(fù)制到你的主函數(shù)前面,變成這樣:
然后,編譯試試,看看編譯結(jié)果!
怎么樣,這下,徹底懂了嗎?
如果對您有幫助,歡迎評論、分享!
C語言研究中心(www.sztianhecheng.cn)