仅标题链接

Car*_*s00 5 c c++ linker

许多C++项目(例如许多Boost库)都是"仅标题链接".

这有可能在平原C吗?如何将源代码放入标题?有没有关于它的网站?

Ale*_*x B 11

执行摘要:你可以,但你不应该.

C和C++代码在编译之前进行预处理:所有标题都以递归方式"粘贴"到包含它们的源文件中.如果在标题中定义一个函数并且它包含在两个C文件中,则每个目标文件最终会有两个副本(一个定义规则违规).

如果所有功能都标记为static,即在翻译单元外部不可见,则可以创建"仅标题"C库.但这也意味着您将获得包含头文件的每个翻译单元中所有静态函数的副本.

它在C++中有点不同:内联函数不是static,编译器发出的符号仍然可以被链接器看到,但链接器可以丢弃重复,而不是放弃("弱"符号).

在头文件中编写C代码并不是惯用的,除非它基于宏(例如queue(3)).在C++中,将代码保留在头文件中的主要原因是模板,这可能导致不同模板参数的代码实例化,这不适用于C.