0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

stdio.h實(shí)現(xiàn)了printf函數(shù)?

學(xué)益得智能硬件 ? 來(lái)源:學(xué)益得智能硬件 ? 2024-12-18 10:28 ? 次閱讀

我們平時(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ū)交流。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【敏矽微ME32G070開(kāi)發(fā)板免費(fèi)體驗(yàn)】使用JLINK的RTT功能實(shí)現(xiàn)類似串口printf打印功能

    收到這款敏矽微ME32G070開(kāi)發(fā)板后,我發(fā)現(xiàn)我的這款板子是壞的,串口打印部分不能打印,我先燒錄了demo文件夾里的串口打印printf函數(shù) 打開(kāi)串口助手 卻沒(méi)有任何數(shù)據(jù),我用萬(wàn)用表測(cè)量
    發(fā)表于 12-15 20:30

    51單片機(jī)中為什么很少出現(xiàn)printf的身影

    流,他能跟外部交互的,只有串口。 51單片機(jī)用的開(kāi)發(fā)語(yǔ)言是C語(yǔ)言,雖然跟標(biāo)準(zhǔn)C有點(diǎn)區(qū)別,但是 printf 函數(shù)還是可以用的,只要修改 printf 的輸
    的頭像 發(fā)表于 12-03 10:46 ?295次閱讀
    51單片機(jī)中為什么很少出現(xiàn)<b class='flag-5'>printf</b>的身影

    C語(yǔ)言中的頭文件能不能重復(fù)包含

    C語(yǔ)言中的頭文件能不能重復(fù)包含? 比如代碼寫成這樣,stdio.h 連續(xù)包含了兩次。 #include #include int main(){ printf("helloworld
    的頭像 發(fā)表于 11-26 17:19 ?162次閱讀

    C語(yǔ)言為什么不需要包含stdio.h

    我們?cè)趯憜纹瑱C(jī)程序的時(shí)候,第一行都會(huì)包含 reg51.h,于是就有同學(xué)提出了疑問(wèn),為什么不需要包含 stdio.h?
    的頭像 發(fā)表于 10-29 15:48 ?339次閱讀

    重定向fputc及putchar函數(shù),但printf沒(méi)有輸出,為什么?

    重定向fputc及putchar函數(shù),但printf沒(méi)有輸出 刪除了drivers/drv_uart.c drv_uart.h 刪除了文件rt-thread\\components
    發(fā)表于 07-18 07:44

    在全志H616核桃派開(kāi)發(fā)板上進(jìn)行基于WiringPi的IO控制

    的編譯和運(yùn)行方法,先在核桃派當(dāng)前目錄新建一個(gè)test.c文件,輸入下面內(nèi)容(該代碼實(shí)現(xiàn)在終端打印“Hello WalnutPi信息”): #include<stdio.h>
    發(fā)表于 05-17 09:38

    Saturday只是一個(gè)枚舉元素啊,而today是一個(gè)枚舉變量,為什么他倆所占的內(nèi)存空間大小是一樣的? [

    #include \"stdio.h\" enum Season { spring, summer=100, fall=96, winter ,winter1
    發(fā)表于 05-10 07:07

    STM32CubeIDE中打印重定向報(bào)錯(cuò)怎么解決?

    HAL_UART_Transmit( huart1 , (uint8_t *) ch, 1, 0xFFFF);報(bào)錯(cuò) printf重定向 報(bào)錯(cuò)../Core/Src/main.c:42:21: error: \'huart1\' undeclared 已添加stdio.h
    發(fā)表于 04-03 07:33

    STM32的疑難雜癥之一:Printf的使用

    一、Printf簡(jiǎn)介Printf是一個(gè)標(biāo)準(zhǔn)的C庫(kù)API,用來(lái)打印信息顯示的。Printf的底層輸出調(diào)用,在windows環(huán)境下是fputc函數(shù),在GNUC環(huán)境下是__io_putcha
    的頭像 發(fā)表于 04-02 08:09 ?3711次閱讀
    STM32的疑難雜癥之一:<b class='flag-5'>Printf</b>的使用

    使用CubeMX生成STM32F103C8T6的DMA ADC代碼為什么無(wú)效?

    */ #include \"main.h\" #include \"stdio.h\" uint32_t ADC_Value=0; int main(void
    發(fā)表于 03-29 06:08

    求助,關(guān)于STM32CUBEIDE1.5.0使用Printf函數(shù)的疑問(wèn)

    找的 #include \"stdio.h\" #ifdef __GNUC__ /* With GCC, small printf (option LD Linker-&
    發(fā)表于 03-22 06:47

    TLE9854 printf函數(shù)無(wú)法輸出是怎么回事?

    TLE9854 的串口能正常輸出,現(xiàn)在想配置成printf,使能STDOUT和STDIN,選擇MicroLIB,可是沒(méi)法輸出,懷疑是程序里這個(gè)函數(shù)沒(méi)被調(diào)用,這個(gè)
    發(fā)表于 02-02 16:05

    如何使用STM模塊測(cè)量函數(shù)的執(zhí)行時(shí)間?

    計(jì)時(shí)器對(duì)其進(jìn)行測(cè)量? 另外,要在執(zhí)行期間獲取這些值,是必須通過(guò)調(diào)試還是可以通過(guò) printf 打印出來(lái)? 我試過(guò) printf 但無(wú)法打印出值(我已經(jīng)包含了 stdio.h 圖書(shū)館)
    發(fā)表于 01-22 06:38

    M451在Keil中,printf函數(shù)打印輸出到哪里?

    在Keil中,printf函數(shù),打印輸出到哪里? 我的項(xiàng)目中沒(méi)有使用UART0,而是使用了UART3
    發(fā)表于 01-17 07:55

    請(qǐng)問(wèn)NuMaker Uni怎么使用printf函數(shù)?

    NuMakerUni怎么使用printf函數(shù)?使用后串口調(diào)試助手上沒(méi)有反應(yīng),求解。
    發(fā)表于 01-16 08:21