回答
.C:C文件(其中實際的行動是,在一般情況)
.H:頭文件(將包含在一個預處理器#include
指令)。包含通常被認爲與代碼的其他部分共享的東西,比如函數原型,#define'd stuff,全局變量的extern聲明(哦,恐怖)等。
從技術上講,您可以將所有內容放在一個文件中。一個完整的C程序。百萬行。但我們人類傾向於組織事物。所以你創建了不同的C文件,每個文件都包含特定的功能。這很好,很乾淨。然後你突然意識到你已經成爲一個給定的C文件的聲明也應該存在於另一個C文件中。所以你會複製它們。因此,最好是提取聲明並將其放入一個通用文件中,即.h
例如,在cs50.h中,可以找到函數的所謂「前向聲明」。 前向聲明是一種快速告訴編譯器應如何調用函數(例如輸入參數)以及返回值的快速方法,因此它可以執行適當的檢查(例如,如果調用的函數參數數量錯誤,它會抱怨)。
另一個例子。假設你編寫一個包含執行正則表達式匹配功能的.c文件。您希望您的函數接受正則表達式,要匹配的字符串以及一個參數,該參數指示比較是否不區分大小寫。
在.C,你會因此就把
bool matches(string regexp, string s, int flags) { the code }
現在,假設你想通過以下標誌:
0:如果搜索是區分大小寫的
1:如果搜索不區分大小寫
而你想保持自己對新標誌的開放,所以你沒有放置布爾值。 玩數字遊戲是很難的,所以你對這些標誌定義了一個有用的名字
#define MATCH_CASE_SENSITIVE 0
#define MATCH_CASE_INSENSITIVE 1
此信息進入.H,因爲如果任何程序要使用這些標籤,就無法知道它們,除非你有方式信息。當然你可以把它們放在.c中,但是你必須包含.c代碼(整個!),這是浪費時間和麻煩的根源。
.c是源文件,.h是header file。
.c : 'C' source code
.h : Header file
通常,.c
文件包含的實施,.h
文件包含一個實現的「接口」。
它們不是真正的庫文件。他們只是源文件。像斯特凡諾說的那樣,。c文件是C源文件,它實際使用/定義了它僅在.h文件(頭文件)中列出的實際源文件。頭文件通常概述將在實際源文件中使用的所有函數原型和結構。把它想象成一個參考/附錄。這在看到頭文件時很明顯,因爲你會看到:)所以當你想使用在這些源文件中編寫的東西時,頭文件包含編譯器需要知道的信息。
很好的說明,謝謝。所以我#include
是的,這通常是怎麼回事。但是,#include
如果我沒有記錯,使用「」是不鼓勵的。 yu應該始終使用<>並適當調整-I。 – 2009-11-08 03:33:52
.c文件是將被編譯的源文件。 .h文件用於將程序的API暴露給該程序的其他部分或其他程序是否正在創建庫。
例如,PizzaDelivery程序可以包含1.c文件和主程序,以及1 .c文件和實用程序功能。現在,要使程序的主要部分能夠使用實用程序功能,您需要通過函數原型將API公開到.h文件中,該.h文件包含在主.c文件中。
當然,沒有什麼說頭文件的擴展名必須是.h
,並且C源文件的擴展名必須是.c
。這些是有用的慣例。
E:\Temp> type my.interface
#ifndef MY_INTERFACE_INCLUDED
#define MYBUFFERSIZE 8
#define MY_INTERFACE_INCLUDED
#endif
E:\Temp> type my.source
#include <stdio.h>
#include "my.interface"
int main(void) {
char x[MYBUFFERSIZE] = {0};
x[0] = 'a';
puts(x);
return 0;
}
E:\Temp> gcc -x c my.source -o my.exe
E:\Temp> my
a
謝謝!我認爲擴展名'.h'和'.c'是強制性的,我從來沒有想過! – 2017-02-16 20:34:30
假設你必須從命令提示符下或使用任何IDE然後如果u沒有保存的.C文件打開你創建的C程序那麼這將是困難的IDE搜索和不同的文件從別人這將推遲搜索。所以.c告訴文件的類型和它的來源,比如.java和其他文件。
- 1. 這意味着什麼可擴展性?
- 2. 什麼?和:意味着在C + +?
- 3. 是什麼[和]意味着C++
- 4. **在C/C++中意味着什麼?
- 5. 術語「千層麪代碼」對你來說意味着什麼?
- 6. -pe對於腳本來說意味着什麼?
- 7. 以下捕獲組符號對Perl來說意味着什麼
- 8. null對於java中的Serversocket來說意味着什麼
- 9. <fd-35>對Vimgolf來說意味着什麼?
- 10. 「網絡性能」對亞馬遜來說意味着什麼?
- 11. 這兩個參數對於WScript來說意味着什麼?
- 12. 對於Android來說,Java是本機的,Objective-C對iOS來說是本機的,這意味着什麼?
- 13. 可擴展性對您意味着什麼?
- 14. 這在C中意味着什麼?
- 15. 用C什麼median_unsafe ++意味着
- 16. 我在C++中意味着什麼?
- 17. Objective-C中的@意味着什麼?
- 18. 這些警告意味着什麼C
- 19. 爲什麼呢(;;)意味着C#
- 20. #pragma在C中意味着什麼?
- 21. 什麼是 「[這]」 意味着C++
- 22. (* var)[n]在C++中意味着什麼
- 23. C - while(* Table [i])意味着什麼?
- 24. 什麼是「|」意味着在C#編程?
- 25. 在C++中意味着什麼?
- 26. C++中的〜意味着什麼?
- 27. [](){}構造在C++中意味着什麼?
- 28. 什麼是({});意味着在C++?
- 29. 什麼的 - >目標C意味着
- 30. 什麼將T [,]意味着C#
沒有,這是正確的。現在我只是去查找頭文件是什麼... – 2009-11-08 03:08:29
這也可能有所幫助:這也可能有所幫助:http://stackoverflow.com/questions/3482948/any-fundamental-difference-between-source-and-header -files-在-C。很多都一樣,但解釋方式稍有不同。 – spugm1r3 2016-09-17 20:08:04