我總是使用C,當你有3個文件時,例如:main.c中的tree.c,tree.h和main.c,我總是包含tree.c和樹.c我總是包含tree.h.現在在C++中這是一樣的嗎?由於我在tree.cpp中找到了一些教程,它們包括tree.h和main.cpp,它們還包含tree.h(而不是C中的tree.cpp)。C++中的頭文件與C不同C
很抱歉,如果它是混亂
我總是使用C,當你有3個文件時,例如:main.c中的tree.c,tree.h和main.c,我總是包含tree.c和樹.c我總是包含tree.h.現在在C++中這是一樣的嗎?由於我在tree.cpp中找到了一些教程,它們包括tree.h和main.cpp,它們還包含tree.h(而不是C中的tree.cpp)。C++中的頭文件與C不同C
很抱歉,如果它是混亂
即使在C I將包括main.h代替tree.c. tree.h中因此在C++中沒有什麼不同。
想法是,標題是正面,描述公共接口。而c文件包含應該從用戶隱藏的實際實現。可以將頭文件保存爲可訪問時將c文件編譯爲目標文件或庫。
C++和C在這方面是相同的。您不應該使用其他C++或C文件,只能使用頭文件 - 抱歉地說,但是您在C中做什麼並不是一個好的做法 - 它會打破文件範圍的假設(例如,影響文件範圍static
的含義)這也意味着你不會從更快的編譯週期中受益,只需編譯已更改的文件即可獲得。
在其他源代碼中不包含源代碼(.c/.cpp),只包含頭文件(.h/.hpp)。您將所有(.c/cpp)源文件編譯爲目標文件並將它們鏈接到可執行文件。您在C++教程中找到的內容對C正確且有效。
c和C++之間的文件包含機制沒有區別。
當您包含「.c」(或.cpp)文件時,您正在使用所謂的single compilation unit方法。
雖然這種方法有其倡導者(並且它在編譯時具有某種優勢),但這不是通常所做的,這就是您所指的教程包含.h文件的原因。
我並不想進入關於什麼是最佳實踐的爭論,但使用單個編譯單元並不容易,因爲範圍可能變得非常難以管理。我建議你只在嚴格需要(如果有的話)時才使用它,並且依靠包含.h文件作爲主要選擇。
此外,如果您已經在main.c中包含tree.c,那麼在tree.c中包含tree.h又有什麼意義? – Vladp