一些初學C語言的人,不知道頭文件(*.h文件)原來還能夠本身寫的。只知道調用系統庫 函數時,要使用#include語句將某些頭文件包含進去。其實,頭文件跟.C文件同樣,是能夠本身寫的。頭文件是一種文本文件,使用文本編輯器將代碼編 寫好以後,以擴展名.h保存就好了。頭文件中通常放一些重複使用的代碼,例如函數聲明,變量聲明,常數定義,宏的定義等等。當使用#include語句將 頭文件引用時,至關於將頭文件中全部內容,複製到#include處。爲了不由於重複引用而致使的編譯錯誤,頭文件常具備
#ifndef LABEL
#define LABEL
//代碼部分
#endif
的格式。其中,LABEL爲一個惟一的標號,命名規則跟變量的命名規則同樣。常根據它所在的頭文件名來命名,例如,若是頭文件的文件名叫作hardware.h,
那麼能夠這樣使用:
#ifndef __HARDWARE_H__
#define __HARDWARE_H__
//代碼部分
#endif
這樣寫的意思就是,若是沒有定義__HARDWARE_H__,則定義__HARDWARE_H__,並編譯下面的代碼部分,直到遇 到#endif。這樣,當重複引用時,因爲__HARDWARE_H__已經被定義,則下面的代碼部分就不會被編譯了,這樣就避免了重複定義。
另一個地方就是使用include時,使用引號與尖括號的意思是不同的。使用引號(「」)時,首先搜索工程文件所在目錄,而後再搜索編譯器 頭文件所在目錄。而使用尖括號(<>)時,恰好是相反的搜索順序。假設咱們有兩個文件名同樣的頭文件hardware.h,但內容倒是不同 的。一個保存在編譯器指定的頭文件目錄下,咱們把它叫作文件I;另外一個則保存在當前工程的目錄下,咱們把它叫作文件II。若是咱們使用的 是#include <hardware.h>,則咱們引用到的是文件I。若是咱們使用的是#include 「hardware.h」,則咱們引用的將是文件II。筆者之前就遇到過一個同事問,爲何他修改了那個頭文件裏面的內容,好象跟沒有修改同樣?就是由於 他有兩個同樣的頭文件(就像咱們剛描述的那樣),他是使用#include<hardware.h>引用的,而他修改時,倒是當前工程所在的 目錄下的那個文件。編輯器