我們平時(shí)包含的 stdio.h 頭文件,里面是不是實(shí)現(xiàn)了 printf 函數(shù)?
為什么會(huì)有這個(gè)疑問(wèn)?因?yàn)槊看问褂?printf,就得包含 stdio.h ,這就導(dǎo)致很多同學(xué)誤以為,stdio.h 里面實(shí)現(xiàn)了 printf。
實(shí)際上并不是,這里就涉及了頭文件和庫(kù)的區(qū)別。
頭文件一般存放大家都要用的東西,比如函數(shù)的聲明,結(jié)構(gòu)體的聲明,命名新的類型等等。
stdio.h 頭文件,里面也只是聲明了一下 printf 函數(shù),作用就是告訴編譯器,printf 是個(gè)函數(shù),編譯的時(shí)候不要報(bào)錯(cuò)。
至于 printf 的實(shí)現(xiàn),在一個(gè)名字類似于 libc.so 這樣的文件中。
.so 是 Linux 下的動(dòng)態(tài)庫(kù)文件,里面存放了各個(gè)函數(shù)的實(shí)現(xiàn),不過(guò)他也屬于二進(jìn)制文件,想要看 printf 的具體實(shí)現(xiàn),還得去其他地方找源碼。
所以,千萬(wàn)不要再以為,包含 stdio.h 是因?yàn)槔锩鎸?shí)現(xiàn)了 printf。
那頭文件里面能不能實(shí)現(xiàn)函數(shù)?反正頭文件也只是在預(yù)處理的時(shí)候展開(kāi),想要在里面寫什么都行。
不過(guò)會(huì)有這樣的情況發(fā)生。
比如 1.h 實(shí)現(xiàn)了函數(shù) test,1.c 和 2.c 都包含了 1.h,編譯的時(shí)候,就會(huì)提示函數(shù) test 重復(fù)定義。
還有一個(gè)類似的問(wèn)題,頭文件里面能不能定義變量,這個(gè)問(wèn)題大家怎么看,如果你也遇到過(guò)這樣的情況,歡迎在評(píng)論區(qū)交流。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62618 -
Stdio
+關(guān)注
關(guān)注
0文章
2瀏覽量
7514 -
Printf
+關(guān)注
關(guān)注
0文章
83瀏覽量
13660
原文標(biāo)題:stdio.h 實(shí)現(xiàn)了 printf 函數(shù)?
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論