2012-03-13 80 views
1

我在看ncmpcpp的源代碼,我看到了這個。當沒有實現文件時包含頭文件?

#include <mpd/client.h> 

在這個文件是其通過ncmpcpp使用的功能。但這些只是標題。不要將cpp文件存放在某個地方嗎?我無法在同一個目錄中找到它們。他們在哪?

此外,當包含的東西被<和>包圍時,我怎麼知道在哪裏看?

回答

4

如果它是第三方庫,很可能不包括源代碼。它也不是必需的。在頭文件中聲明的所有符號(應該被使用)應該被導出到.lib文件中,該文件可能與頭文件一起提供。

除非你有template s,它可以是內聯的。

如果您想自己編譯代碼,則只需要cpp文件或更一般的實現文件。你不這樣做。您可以使用只有標題和二進制文件的模塊。

當然,想到開源項目的例子,通常包含所有文件,但如果它是商業產品,爲什麼要發佈源代碼?什麼讓競爭對手不再複製它並以新名稱轉售?

還有,告訴到哪裏尋找由<>""分隔頭沒有標準的規則,但普遍的共識是,<>是用於系統頭文件(如stringiostream)和""爲自己的頭(myclass.h )。它只是告訴編譯器首先看哪裏。如果有一個庫(靜態或動態鏈接),它的編譯器可以鏈接到,這些一般都是.a.lib文件(雖然很少,你可能需要一個.def文件)不需要

+0

這來自我從源代碼構建的東西,爲什麼不需要實現文件? – 2012-03-13 16:19:49

+0

@javascriptninja:查找「動態鏈接」 – 2012-03-13 16:32:37

+0

當您構建模塊時需要它們,這就是我所說的。 – 2012-03-13 18:29:11

2

源文件。

有關搜索路徑,請參見this用於MSVC,this用於GCC。