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

Including header files when there's no implementation file?

本文关键字:文件 包含头 实现      更新时间:2023-10-16

我在看ncmpcpp的源代码,看到了这一点。

#include <mpd/client.h>

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

此外,当包含的内容被<和>,我怎么知道去哪里看?

如果是第三方库,则很可能不会包含源代码。也不需要它。标头中声明的所有符号(旨在使用)都应导出到可能随标头一起提供的.lib文件中。

除非您有template,它可以是内联的。

如果您想自己编译代码,您只需要cpp文件,或者更一般地说,实现文件。但你没有。您可以使用只有标头和二进制文件的模块。

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

没有标准规则告诉在哪里查找由<>""定界的报头,但普遍的共识是<>用于系统报头(如stringiostream),""用于自己的报头(myclass.h)。它只是告诉编译器先看哪里。

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

有关搜索路径,请参阅MSVC的此项和GCC的此项。