在 C 語言中,頭文件或包含文件通常是一個源代碼文件,程序員使用編譯器指令將頭文件包含進其他源文件的開始(或頭部),由編譯器在處理另一個源文件時自動包含進來。
一個頭文件一般包含類、子程序、變量和其他標識符的前置聲明。需要在一個以上源文件中被聲明的標識符可以放在一個頭文件中,使用時在其他源文件中包含該頭文件。
頭文件作為模塊的公共接口,在其中聲明函數原型、對象和數據類型。
讓我們首先創建一個頭文件 add.h:
#ifndef _ADD_H_ #define _ADD_H_ int add(int, int); #endif
其中 #ifndef, #define, #endif 是編譯器指令,為了防止重復包含頭文件,最好將所有聲明置於 #ifndef ... #endif 區塊中。_ADD_H_ 是頭文件標識符,為了保持唯一性,一般為頭文件名大寫,並將其中的句號替換為下划線,同時前后各加一條下划線。
然后讓我們再創建一個源文件 add.c 來實現 add.h 中聲明的函數原型:
#include "add.h" int add(int a, int b) { return a + b; }
至此我們就准備好了一個源碼文件 add.c 和一個頭文件 add.h,現在你可以在其他 .c 文件中包含頭文件 add.h,然后將它鏈接到 add.c 的鏈接文件。
現在我們創建一個文件 triple.c,並在其中包含 add.h 頭文件:
#include <stdio.h> #include "add.h" int triple(int x){ return add(x, add(x, x)); } void main() { int x; scanf("%d", &x); printf("x=%d\n", triple(x)); }
接下來就是使用 gcc 編譯它們,首先編譯 .c 源文件為 .o 鏈接文件:
$ gcc -c triple.c -o triple.o $ gcc -c add.c -o add.o
我們得到兩個鏈接文件 triple.o, add.o。現在讓我們將它們鏈接成可執行文件:
$ gcc triple.o add.o -o triple
讓我們測試一下可執行文件 triple:
$ ./triple 12 x=36
總結:頭文件是在預編譯階段使用,在預編譯時編譯器會使用頭文件中的內容替換 #include 命令。