2013-08-20 23 views
1

假設我們有函數(外部只考慮這裏)int foo(int a,char * b),通常會有一個頭文件記錄函數的作用,每個參數和返回值的作用等。也可能是doxygen格式。我的習慣是這樣的頭文件應該放到.h文件中,因爲這是定義接口的地方,讀者應該擁有那個地方的所有信息。但是很多人將這樣的頭文件保存在C文件中實際實現的地方。我在Linux內核代碼中也看到了這一點。那麼我錯了嗎?你更喜歡哪個?C函數標頭位置:.h或.c?

+0

你是指文檔評論應該去哪裏?如果文檔不是源文件本身,而是通過(比如說)doxygen進行預處理,那麼真正的文檔就是HTML/PDF文件,所以不管它是在'.h'還是'。 C'。 – jxh

+2

我應該補充一點,重要的是一致性,以便將來的開發人員可以遵循可預測的和可接受的編碼實踐。 – jxh

+0

@jxh是文檔評論。我只考慮代碼瀏覽場景。使用HTML/PDF顯然不重要。 – lang2

回答

1

回答這個問題在很大程度上是「這取決於」:

要看什麼呢?誰在閱讀文檔,以及他們如何訪問它。

如果您正在開發程序,那麼將文檔嵌入到實現中可能是確定的,因爲任何想了解您的程序的人都可以訪問源代碼並閱讀它。您的目標受衆可能是開發人員在開發程序本身,因此將C文件中的文檔以及他們正在處理的大量代碼放在一起是一種合適的方法。

如果您正在開發,目標受衆會發生變化(或者您可能有兩個目標受衆)。您仍然擁有開發人員,他們可以使用更詳細的文檔,因爲它與私人實施細節有關。您還擁有圖書館的用戶,他們只關心他們正在使用的界面;從代碼瀏覽的角度來看,他們通常只能訪問頭文件。

3

儘管頭文件可以以任何方式使用,但它們主要是一種啓用外部鏈接的機制。

您設計了一個用於外部消費的API,並且將所有需要使用此API(常量,類型,原型)的所有內容放在頭文件中。

所有其他的東西,這是實現的一部分,並不需要被外部用戶看到,可以進入源文件(如果使用本地化爲一個文件)或私有頭文件在多個文件之間共享。後者是頭文件啓用外部鏈接的另一個例子,但是用於內部消費。

0

我把它們放在.h文件中,當它是我的選擇時,如果我有.h文件。如果我只有一個.c文件,我將在定義它們時記錄這些函數,只是因爲如果我只是有一個.c文件,我可能仍然在編碼,如果我更改了代碼,我想更改文檔。

我覺得文檔和聲明放在一個完成的c項目的單獨文件中。代碼中的文檔分解了代碼,可能是多餘的。

如果我在某處做出貢獻,我會遵循既定的約定。

+0

「*代碼中的文檔分解了代碼...... *」請您詳細說明一下。我覺得源ocde文件是必不可少的。也許你是指一種不同類型的文檔? – alk

+0

當然。我主要考慮兩種類型的文檔:解釋代碼的文檔和解釋如何使用代碼的文檔。當然,前者應該在代碼中。但是,如果你只是說void string_reverse(char * string,size_t string_len)接受一個字符串和一個字符串長度並反轉字符串,這並沒有描述代碼如何工作,那麼你將如何使用它。這應該在標題中。 – lsiebert