我們在寫單片機程序的時候,第一行都會包含 reg51.h,于是就有同學提出了疑問,為什么不需要包含 stdio.h?
如果從C語言本身來講,一個完整的 C 代碼并不需要包含頭文件。
標準中也提到,程序的入口是 main 函數,它應該有個整型返回值,參數可有可無。
所以一個最簡單的 C 代碼應該是這樣。
int main(void)
{
return 0;
}
至于它的返回值,即使寫成 void,很多編譯器也不會提示問題。
那我們學習C語言的時候,為什么在第一行加上 stdio.h?
因為在代碼中用到了 printf,使用函數,就得提前聲明,告訴編譯器它是個函數,并且函數原型是什么樣。
而 printf 函數的聲明,就放在了 stdio.h 里面。
如果程序里面用不到輸入輸出相關的函數,完全可以不包含 stdio.h。
再回到 51 單片機上。
作為一個裸機程序,很多時候,我們用不到 printf,所以也就很少包含 stdio.h。
包含 reg51.h,主要還是因為這里面定義了很多寄存器,比如點燈需要用到的 P1 等等,打開 reg51.h,你會發現,它其實就是個地址。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6076文章
45495瀏覽量
670318 -
C語言
+關注
關注
183文章
7644瀏覽量
145580 -
函數
+關注
關注
3文章
4417瀏覽量
67504 -
編譯器
+關注
關注
1文章
1672瀏覽量
51600
原文標題:C語言并不是非要包含stdio.h
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
庫文件stdlib.h和stdio.h不支持utoa()和snprintf()
; gt;但是函數只是把錯誤拋在上面。但并非總是如此。我想我需要知道STDLIB。h和STDIO。h實際上是如何加載到項目中的,以及從何處來的。什么是對標準的內置庫文件進行更改,這些文
發表于 01-11 11:21
ucos在PC機上的應用提示無法打開stdio.h文件
為什么我編譯#includevoid main(){while(1){printf("hello world\n");}}老是提示無法打開stdio.h文件?求大神解答
發表于 04-28 23:13
嵌入式開發中C語言編程的相關資料分享
,使用庫函數是不可避免的。關于使用庫函數的最簡單的例子就是printf()。在Linux環境下的C語言編程中,庫函數包括兩個部分:一種是C語言的標準庫函數,例如
發表于 12-15 06:13
編譯顯示fatal error: stdio.h: No such file or directory怎么解決?
在編譯通過命令arm-poky-linux-gnueabi-gcc test.c,編譯程序時,顯示fatal error: stdio.h: No such file or directory,用gcc編譯不會報錯!
發表于 01-10 06:35
基于單片機設計的軟件時鐘C語言程序
本內容提供了基于單片機設計的軟件時鐘C語言程序 程序如下: #pragma db oe #include reg52.h #include absacc.h #include stri
發表于 11-21 15:59
?199次下載
一些常見的C語言字符串操作
? #字符串倒序輸出 實現邏輯,通過strlen獲取字符串長度,然后通過 len/2 進行交叉賦值,這里需要注意,不需要考慮len是奇數還是偶數的問題。 如果len是奇數,最后一個字符就不需要倒序
C語言中的頭文件能不能重復包含
C語言中的頭文件能不能重復包含? 比如代碼寫成這樣,stdio.h 連續包含了兩次。 #include #include int main(
stdio.h實現了printf函數?
我們平時包含的 stdio.h 頭文件,里面是不是實現了 printf 函數? 為什么會有這個疑問?因為每次使用 printf,就得包含 stdio.h ,這就導致很多同學誤以為,
系統c盤滿了怎么清理不需要文件
統c盤滿了怎么清理不需要文件 ? 你的 c: 驅動已經滿了, 電腦變慢或者無法安裝更新, 這是 windows 機器常見的問題, 不用當技術專家也能騰出空間, 這篇指南用簡單安全的步驟幫你找到并刪除
C語言為什么不需要包含stdio.h
評論