2012-04-27 54 views
16

這個問題聽起來很愚蠢。但我想知道爲什麼我們使用「.hh」作爲C++頭文件的擴展,而不是使用「.h」。C++:爲什麼使用「.hh」作爲C++頭文件的擴展名的原因

頭文件被預處理,預處理器甚至不關心頭文件的擴展。所以,即使我創建了一個擴展名爲「.qwe」(test.qwe)的頭文件。那麼,爲什麼要使用「.hh」作爲C++頭文件的擴展名。有人說,我們使用「.cc」作爲C++文件的擴展來區別C文件(其擴展名爲「.c」),同樣我們使用「.hh」作爲C++頭文件的擴展名區分C頭文件(擴展名爲「.h」)。我不認爲這是一個有效的理由。

有沒有人知道這樣命名的原因。

+4

這只是一個約定,有些人用來區分用於C程序的頭文件中用於C++程序的頭文件。沒有什麼更多。無論它是否有效,都會大致歸結爲與支架放置論據類似的宗教戰爭。 – 2012-04-27 16:23:16

+0

另請參閱http://stackoverflow.com/q/5122728/716443。對於某些編譯器來說,您的頭文件可能是針對Objective C++的。 – DavidO 2012-04-27 16:25:04

+1

'.hpp'是C++頭文件的流行選擇,但我只是使用'.h'和'.cpp'。這基本上是個人偏好。 – AJG85 2012-04-27 16:26:32

回答

25

有人說,我們是用「的.cc」作爲擴展C++文件從C文件來區分(其中有一個擴展名「.c」的),同樣我們使用「.hh」作爲C++頭文件的擴展來區分C頭文件(其具有擴展名「.h」)

正是這個原因。它只是將CPP標題與C標題區分開來。

某些程序員和庫(例如Boost)使用.hpp作爲CPP標頭。我個人的選擇是這樣的:

  • example.c
  • example.cpp
  • example.h文件
  • example.h文件++

即使它們都屬於一個龐大的工程,你仍然可以找出哪一個是哪個。沒有描述是必要的。

5

您可以根據需要爲您的標題命名,它們甚至可以根本沒有擴展名。

This FAQ提到標題命名約定。

1

這不是因爲任何特定的原因,它只是一個(開發者或項目特定的)約定。由於「文件擴展名」只是名稱的一部分,因此源文件只是純文本文件並不重要。此外,頭文件只是複製粘貼到文件,包括他們(通過#include,所以文件擴展名甚至更少意味着他們。

Borland的圖書館頭有.hpp擴展。C++標準庫頭文件中沒有擴展名的。這是隻是一個約定和個人口味的問題。

1

這是完全的約定,沒有特別的理由。通常人們試圖在整個項目中保持一致,或者跨團隊乃至整個公司。它可以幫助開發誰拿起你的代碼,你早已遠去後才明白,你abc.hh去與文件abc.cc和abc.h去與abc.c.

1

的原因之一,如果我創建具有圍繞一堆C++代碼C API一個DLL,我需要哪種客戶端可以使用導入C函數我的C頭文件和我的內部C++頭文件來區分這是我明確不希望允許客戶端導入。

從大多數語言/環境中綁定到C函數非常簡單,幾乎沒有開銷。您不必考慮在C++中繼承的所有複雜性。所以如果我要與這樣一個庫一起工作,我一定會將我的C++從我的C接口中分離出來。

1

我認爲這主要是一種社會習俗。

然而,最近的GCC編譯器能夠編譯(單)頭foo.hhfoo.h成類似foo.hh.gchfoo.h.gch主要含有編譯器(該cc1plus程序通過g++啓動)的永久存儲器堆圖像,它已被解析後該標題。

請注意,C++ 11標準庫定義了像例如<vector>沒有任何擴展名。

相關問題