2010-05-14 38 views
59

我希望能夠創造的頭文件功能,我可以在我的C程序的一個#包括集合。如何創建C頭文件

+43

帶文本編輯器? – stefanB 2010-05-14 01:45:53

+12

如果我正確地遵循,你想要創建一個類似於標準C庫的庫,這樣你就可以包含一個帶有函數定義的頭文件,然後在構建最終的可執行文件時與該庫鏈接。是對的嗎? – 2010-05-14 02:06:04

+0

是的,你是對的。 – user340838 2010-05-14 02:07:36

回答

133
  1. 打開文本編輯器
  2. 創建一個名爲whatever.h
  3. 把你的函數原型在它

做了新的文件。

例whatever.h

#ifndef WHATEVER_H_INCLUDED 
#define WHATEVER_H_INCLUDED 
int f(int a); 
#endif 

注:包括防護裝置(預處理命令)加入感謝盧克。它們避免在同一編譯中包含相同的頭文件兩次。另一種可能性(在評論中也提到)是添加#pragma once,但不保證在每個編譯器上都支持。

例whatever.c

#include "whatever.h" 

int f(int a) { return a + 1; } 

然後你就可以包括「whatever.h」到任何其他.c文件,並與whatever.c的目標文件鏈接。

像這樣:

sample.c文件

#include "whatever.h" 

int main(int argc, char **argv) 
{ 
    printf("%d\n", f(2)); /* prints 3 */ 
    return 0; 
} 

要編譯它(如果你使用GCC):

$ gcc -c whatever.c -o whatever.o 
$ gcc -c sample.c -o sample.o 

要鏈接的文件,以創建一個可執行文件:

$ gcc sample.o whatever.o -o sample 

您可以測試樣品:

$ ./sample 
3 
$ 
+7

你可能想提到頭衛隊 – luke 2010-05-14 01:48:56

+0

@盧克:非常感謝。不知道標頭警衛是什麼。現在去谷歌。再次感謝。 – 2010-05-14 01:50:06

+0

@luke:哦!我懂了。好點子。去添加它們。 – 2010-05-14 01:50:49

2

頭文件可以包含任何有效的C代碼,因爲它們通過在編譯之前預處理器注入編譯單元。

如果頭文件包含一個函數,並且包含多個.c文件,則每個.c文件都將獲得該函數的副本併爲其創建一個符號。鏈接器會抱怨重複的符號。

技術上可以在頭文件中創建static函數以包含在多個.c文件中。雖然通常沒有這樣做,因爲它違反了在.c文件中找到代碼的約定,並且在.h文件中找到了聲明。

有關更多說明,請參見C/C++: Static function in header file, what does it mean?中的討論。