咱們在使用c編程的時候常常會遇到頭文件,前段時間我本身作了個小項目的時候,也遇到了關於頭文件的問題。編程
預處理器發現#include 指令後,就會尋找後跟的文件名並把這個文件包含的內容包含到當前文件中。被包含文件的文本將替換源文件中的#include 指令,就像您把被包含文件中的所有內容鍵入到源文件的特定位置同樣(摘抄自 cprimer plus)。簡單來講就是,編譯器把 #include 後跟隨的文件內容都寫到源文件中,寫的位置就是 #include放的位置。函數
#include指令有兩種形式spa
1:#include<stdio.h> 文件名放在尖括號裏面unix
在unix系統中,尖括號告訴預處理器在一個活多個標準的目錄中尋找文件。若是作開發,好比,我使用keil和mdk,編譯器也遵循這樣的原則,放在默認目錄中,不用人工處理。開發
2:#include」mystuff.h」 文件名放在雙引號中編譯器
有兩種形式:io
<1>:#include」hot.h」收索當前的工做目錄編譯
<2>:#include」/usr/biff/p.h」收索/usr/biff所在的目錄搜索
對於unix系統,使用雙引號意味着先搜索本地目錄,可是具體收索那個牡蠣依賴於編譯器。有些編譯器收索源代碼所在的目錄,還有些收索工程文件所在的目錄。引用
對於我使用的mdk,我是將文件所在的文件夾添加到工程可以搜索的目錄中。
在寫c程序的時候,咱們常常會把函數寫在一個.c文件中,而後在另外的.c文件中引用函數,使得整個程序更加整潔,方便。
可是在頭文件使用的時候常常出現重定義的錯誤,我使用的解決辦法是:
首先把hello.c拆分爲兩個文件hello.c和hello.h。hello.h中包含hello.c所須要的頭文件和.c中出現的函數名。例如在hello.c中有
void add (int x,int y)
{
z=x+y;
return y;
}
就在hello.h中添加 void add(int x,int y);和hello.c所需的頭文件#include<stdio.h>
在拆分後的hello.c添加#include」hello.h」,而後把hello.c和hello.h放在同一個文件夾便可。當有文件須要add函數時直接在頭文件中添加#include」hello.h」便可。
當多個文件引用hello.h時候,例如當plus.c中引用hello.c,jump.c須要使用plus.c和add.c。就會出現重定義的錯誤(引用hello.c和plus是z指將hello.h和plus.h頭文件添加到jump.c中)
這時候就引用防重定義。假設要放重引用hello.h 在開頭添加
#ifndef __HELLO_H__
#define __HELLO_H__
結尾添加
#endif
既把你要重定義的文件的開頭添加
#ifndef __HELLO_H__
#define __HELLO_H__
HELLO就是你文件的名字改爲大寫 H就是你文件類型
再在結尾加上
#endif
便可。