在c
,你不必在所有打電話給你的任何文件。因此,你可以打電話給你的頭mylongheadername.h
,而你打電話給你的源文件a.c
,有一個功能叫justArandomFunctionName
。
但是,你應該知道,你的源文件需要包含頭文件。通常,頭文件和源文件之間有很強的聯繫,所以這就是總是以這種方式完成的原因。但是,以下是完全有效的:
a.c : func1 implementation
func2 implementation
b.c : func3 implementation
func4 implementation
c.h : func1 declaration
func3 declaration
d.h : func2 declaration
func4 declaration
不過,也有一些問題,這種方法是使用設置這樣的文件(這意味着你必須把額外的工作變成右構建這些文件)時,可能會產生,這只是不好的做法。但是,使用頭文件的方式只是慣例,幾乎沒有任何一個是由該語言執行的。
接下來就是如何的問題,如果頭文件不知道該函數定義這個地方可以工作。這個想法是,它不需要知道。
基本上,所有你的頭做的是告訴你什麼地方定義的符合某個特定的個人資料(什麼名字,什麼參數,什麼返回類型)的函數編譯器。當你的編譯器讀取它時,基本上它所做的就是將所有這些信息混合成一個奇特的名字,然後它將插入到正在調用的文件中,這意味着它仍然不會執行任何操作。下一步,您需要使用鏈接器將每個文件的編譯版本轉換爲單個可執行文件。這做了很多事情,但其中最重要的一件事是它解決了編譯器製作的所有這些奇特的名字。但是,鏈接器執行此操作的方式是它只是讀取文件的所有編譯版本,並將函數的定義與其他代碼中的實際位置相匹配。因爲它只處理你同時擁有的所有東西,所以你的函數在哪裏定義並且頭文件永遠不需要知道這一點。
您好Steve,我不知道引用鏈接 - #include指令在某種意義上是預處理器的獨立功能。它可以用來拉入_anything_包括原始的C代碼。該聲明被提到的文件內容取代。所以afaik是慣例,不一定是標準(即使頭文件的位置不是標準的一部分)。 HTH –