嵌入式工程師,你知道.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
- Python中is和==的區別有多大,你知道嗎?Python
- 小青柑和柑普茶的區別你知道嗎?
- 【嵌入式工程師面試高頻問題】你知道SPI嗎工程師面試
- 你知道「編譯」與「解釋」的區別嗎?編譯
- 你還不知道mysql中空值和null值的區別嗎?MySqlNull
- 今天的考核題目: 你知道React和Vue的區別嗎? skr,skrReactVue
- 你真的懂 == 和 equals 的區別嗎?
- 菜鳥學Java(二十)——你知道long和Long有什麼區別嗎?Java
- C系列語言中.c&&.h檔案內容的區分
- dll、Lib、obj、.h檔案的區別與作用OBJ
- C語言include關鍵字和引用.h .c的區別C語言
- .ora檔案、.dbf檔案和.dat檔案的區別
- 你知道為何你找不到軟體工程師嗎?軟體工程工程師
- 因特爾CPU i5和i7的區別在哪裡,你知道嗎?
- 你真的瞭解 NDK 和 jni 的區別嗎
- 5種高大上的yml檔案讀取方式,你知道嗎?
- C#專案obj和bin檔案什麼區別和聯絡C#OBJ
- 華為nova8和榮耀50最大的區別是什麼知道嗎?你i哪個
- C語言與嵌入式C語言的區別C語言
- 你知道 go 切片的 copy 和 view 嗎GoView
- 怒贊!你知道為何你找不到軟體工程師嗎?軟體工程工程師
- 你瞭解C盤嗎?C盤檔案知識大全
- http與https的區別我真的知道嗎HTTP
- 加速檔案傳輸:檔案和UDP之間的區別UDP
- ROR中h()方法和sanitize的區別
- 第三方軟體測評▏web測試和app測試的區別你知道嗎?WebAPP
- 有人瞭解 paas 和元件化嗎,想知道這 2 個的區別元件化
- 持續測試跟自動化測試的這些區別你知道嗎?
- 你知道C++如何在一個函式內返回不同型別嗎?C++函式型別
- 網路釣魚 你知道如何識別嗎?
- linux系列之: 你知道檢視檔案空間的兩種方法嗎?Linux
- 你真的理解@import和link引入樣式的區別嗎Import
- bed 檔案 和 wig 檔案 有什麼區別
- 關於Ae和Pr的的區別,你瞭解對了嗎?
- 作為嵌入式/軟體開發工程師你需要知道的東西工程師