没有实现文件时包含头文件?

时间:2012-03-13 15:57:01

标签: c++ compilation header-files

我正在查看ncmpcpp的源代码,我看到了这个。

#include <mpd/client.h>

该文件内部是ncmpcpp使用的函数。但那些只是标题。 cpp文件也不必存在于某个地方吗?我在同一目录中找不到它们。他们在哪儿?

此外,当包含的内容被&lt;和&gt;,我怎么知道在哪里看?

2 个答案:

答案 0 :(得分:4)

如果是第三方库,很可能不会包含源代码。也不需要。标题中声明的所有符号(意图使用)应该导出到标题附带的.lib文件中。

除非你有template s,这可能是内联的。

如果您想自己编译代码,则只需要cpp个文件,或者更常见的是实现文件。你没有。您可以使用只包含标题和二进制文件的模块。

当然,我想到了开源项目的例子,其中通常包含所有文件,但如果它是商业产品,为什么要发布源代码呢?什么阻止任何竞争对手复制并以新名称转售?

没有标准规则可以说明查找由<>""分隔的标头的位置,但普遍的共识是<>将用于系统标头(如stringiostream)和""表示自己的标题(myclass.h)。它只是告诉编译器首先查找。

答案 1 :(得分:2)

如果存在编译器可以链接到的库(静态或动态链接),则不需要源文件,这些文件通常是.a.lib个文件(尽管很少你可能需要一个.def文件。

对于搜索路径,请参阅this了解MSVC和this了解GCC。