今天我們來聊聊C語言中的頭文件。
c語言程序代碼文件擴(kuò)展名只能是.c或者.h,換句話說,c語言程序代碼只能在擴(kuò)展名為.c或者.h的文件中編寫。我們把.h文件稱為頭文件。頭文件可以在.c文件中引用,也可以在.h文件中引用。
頭文件是做什么用的呢?我們來看一段程序代碼。
左邊是源代碼,右邊是執(zhí)行結(jié)果。這段代碼的功能是打印出字符串“Hello, World!”。
我們能看到,源代碼文件第一行是"#include
注:c語言中行前加雙斜線“//”代表注釋掉這一行,也就是去掉這一行代碼。
這時(shí)我們發(fā)現(xiàn)執(zhí)行后右邊的結(jié)果欄出現(xiàn)了報(bào)錯(cuò),為什么呢?這是因?yàn)榇蛴≌Z句是printf函數(shù)輸出的,而printf函數(shù)是在頭文件stdio.h中聲明的,把引用stdio.h這一行去掉,代碼在編譯時(shí)就找不到printf這個(gè)函數(shù),所以就報(bào)錯(cuò)了。
有的朋友問,我們不引用頭文件,把printf函數(shù)放在.c文件里可以嗎?當(dāng)然可以。但是printf屬于通用函數(shù),幾乎每個(gè).c文件都會(huì)用到,像這樣使用頻率極高的函數(shù)有很多,甚至有幾百個(gè),一個(gè)項(xiàng)目里的.c文件也有很多,每個(gè).c文件里放幾百個(gè)函數(shù)聲明,是不是很難看?況且我們只想直接調(diào)用這些函數(shù),根本不關(guān)心這些函數(shù)長(zhǎng)什么樣子,又何必把它羅列在我們的.c文件中?
c語言為我們實(shí)現(xiàn)了許多通用的函數(shù),比如拷貝函數(shù)、比較函數(shù)等等,放在一個(gè)通用的函數(shù)庫中供我們直接使用,而這些函數(shù)的聲明就放在一些標(biāo)準(zhǔn)的頭文件中,stdio.h就是標(biāo)準(zhǔn)頭文件之一,我們只要引用這些頭文件,就可以直接調(diào)用頭文件中聲明的函數(shù),而無需自己去實(shí)現(xiàn)這些函數(shù)了。當(dāng)然,除了可以引用標(biāo)準(zhǔn)頭文件,我們也可以根據(jù)實(shí)際需求,自己創(chuàng)建和編寫頭文件。
那么頭文件的內(nèi)容只能是函數(shù)聲明嗎?當(dāng)然不是。除了函數(shù)聲明,變量定義、結(jié)構(gòu)定義、宏定義都可以放在頭文件中,如果你覺得你寫的某個(gè)函數(shù)使用率很高,也可以把它放在頭文件中。總而言之,通用的東西都可以放在頭文件中。
頭文件的引用可以寫成“#include
頭文件用尖括號(hào)括起來和用引號(hào)括起來意義是不同的,前者意思是讓編譯器直接去c函數(shù)庫里或者用戶配置的路徑去查找,而不會(huì)在當(dāng)前目錄去查找。后者意思是讓編譯器先在當(dāng)前目錄去找,如果當(dāng)前目錄找不到,再去c函數(shù)庫里或者用戶配置的路徑去查找。這里所說的當(dāng)前目錄,大家可以理解為引用頭文件的文件所在的目錄。
好了,今天就跟大家分享到這里。
-
C語言
+關(guān)注
關(guān)注
180文章
7629瀏覽量
140132 -
代碼
+關(guān)注
關(guān)注
30文章
4886瀏覽量
70203
發(fā)布評(píng)論請(qǐng)先 登錄
cypress3014在頭文件修改編譯后,時(shí)間不變,這樣頭文件的程序有被執(zhí)行嗎?
AI工作流自動(dòng)化是做什么的
請(qǐng)問DAC8814中的Pin22,AgndF是做什么的?
ADS1192擁有的兩個(gè)GPIO1和GPIO2,是用來做什么的?
在ads1261的通用c語言例程中的390行的if是用來區(qū)分什么的呢?
C語言中的頭文件能不能重復(fù)包含
音頻子系統(tǒng)主要是用來做什么的,可以用來做PCM編碼器嗎?
C語言生成可執(zhí)行二進(jìn)制文件的具體過程

評(píng)論