嵌入式工程師,你知道.c檔案和.h的區別嗎?
.c檔案是程式設計中的一個重要概念。所謂“檔案”一般是指儲存在外部介質上資料的集合。一批檔案是以資料的形式存放在外部介質(如磁碟)上的。作業系統是以檔案為單位對資料進行管理的,也就是說,如果想找存在外部介質上的資料,必須先按檔名找到指定的檔案,然後再從該檔案中讀取資料。要向外部介質上儲存資料也必須先建立一個檔案(以檔名標識),才能向它輸出資料。
1 .h檔案作用
方便開發:包含一些檔案需要的共同的常量,結構,型別定義,函式,變數申明;
提供介面:對一個軟體包來說可以提供一個給外界的介面(例如: stdio.h)。
2 .h檔案裡應該有什麼
常量,結構,型別定義,函式,變數申明。
3 .h檔案不應該有什麼
變數定義, 函式定義。
4 extern問題
對於變數需要extern;對於函式不需要,因為函式的預設狀態是extern的。如果一個函式要改變為只在檔案內可見,加static。
5 include包含問題
雖然申明和型別定義可以重複,不過推薦使用條件編譯。 #ifndef_FILENAME_H #define_FILENAME_H …… #endif
6 應該在那兒包含.h檔案
在需要的地方,比如某個提供介面的h檔案僅僅被1.c檔案需要,那麼就在1.c檔案裡包含。
編寫的程式一般會有.h檔案和相對應的.c檔案,.h檔案是宣告所用,.c檔案是其函式實現部分。在呼叫時只要包含.h檔案即可,我們沒有聽說過#include “delay.c”這類的程式,同時也不提倡使用這個形式。
在delay.h檔案中:
//對呼叫的函式宣告
#ifndef__DELAY_H__ #define__DELAY_H__
externvoidDelayms(unsigned int n); #endif
在delay.c檔案中:
//函式實現部分
#include
//for crystal11.0592M
voidDelayms(unsigned int n) {
unsignedinTI,j; for(j=n;j》0;j--) for(i=112;i》0;i--); }
在主程式main.c中:
#include //在主程式包含.h檔案,不能包含.c檔案 ……
上述方法仍然要求每建立一個工程就需要把對應的標頭檔案複製到工程的資料夾裡,這樣看來仍然是比較麻煩的,這時還有另外一種方法就是將做好的標頭檔案放在一個資料夾中,然後將這個資料夾整體拷貝到.KEILC51軟體的安裝INC資料夾下面(inc資料夾包含各種標頭檔案),以後若需要使用某個標頭檔案,就如使用KEIL自帶的標頭檔案一樣方便了,在主函式mani()之前有一句#include 就可以在main()中使用其中的函式了。
來自網路,部分修改
相關文章
- 你真的知道 == 和 equals 的區別嗎?
- 你知道void和Void的區別嗎
- hashCode和identityHashCode的區別你知道嗎?IDE
- 【嵌入式工程師面試高頻問題】你知道SPI嗎工程師面試
- Python中is和==的區別有多大,你知道嗎?Python
- 小青柑和柑普茶的區別你知道嗎?
- 工程專案管理的7個主要特徵,你知道嗎?專案管理特徵
- 全棧工程師和架構師的區別全棧工程師架構
- 你還不知道mysql中空值和null值的區別嗎?MySqlNull
- 今天的考核題目: 你知道React和Vue的區別嗎? skr,skrReactVue
- 網路安全工程師和資訊保安工程師的區別!工程師
- 作為嵌入式/軟體開發工程師你需要知道的東西工程師
- 你真的懂 == 和 equals 的區別嗎?
- 你知道TCP和UTP的區別是什麼嗎?說說你對它們的理解TCP
- C語言include關鍵字和引用.h .c的區別C語言
- 5種高大上的yml檔案讀取方式,你知道嗎?
- C語言與嵌入式C語言的區別C語言
- 什麼是SRE工程師?SRE工程師和運維有什麼區別?工程師運維
- 加速檔案傳輸:檔案和UDP之間的區別UDP
- bed 檔案 和 wig 檔案 有什麼區別
- 你和架構師的的區別是什麼?架構
- 你瞭解C盤嗎?C盤檔案知識大全
- 嵌入式工程師的薪資和發展前景工程師
- 程式設計師:我終於知道post和get的區別程式設計師
- http與https的區別我真的知道嗎HTTP
- link和@import匯入css檔案的區別ImportCSS
- linux系列之: 你知道檢視檔案空間的兩種方法嗎?Linux
- 你知道 go 切片的 copy 和 view 嗎GoView
- Go SliceHeader 和 StringHeader,你知道嗎?GoHeader
- Spring - 配置檔案中的classpath: 和 classpath*: 的區別Spring
- 你真的理解@import和link引入樣式的區別嗎Import
- 你知道什麼是區塊鏈嗎?區塊鏈
- 第三方軟體測評▏web測試和app測試的區別你知道嗎?WebAPP
- 華為nova8和榮耀50最大的區別是什麼知道嗎?你i哪個
- 有人瞭解 paas 和元件化嗎,想知道這 2 個的區別元件化
- 關於檔案系統在建立目錄檔案和普通檔案時的區別
- 建模分析師與演算法工程師的主要區別演算法工程師
- 幽默:程式設計師與軟體工程師的區別程式設計師軟體工程工程師