我知道它们在头文件和库之间有很多区别,但是可以肯定地说库包含可编译的代码,而头文件不包含吗?
答案 0 :(得分:0)
库包含已编译对象代码(不是“可编译代码”,它是.c文件)。库是对象模块的打包集合。
标题(通常)包含声明性的源代码-它们允许编译器查看数据类型以及要链接的其他目标代码中定义的函数和数据的签名(从库或单个已编译源(对象)模块。
我之所以这么说是因为#include
不是C语言的一部分,而是预处理器指令(就像C中以#
开头的任何行一样)。预处理程序在将#include
文件的内容传递给编译器之前先插入它,因此实际上它可以包含任何有效的代码,但是与其他可能包含的代码链接时,这通常会引起问题。相同的标题。
这与“库与标题”无关,因为它们的用途完全不同,并且涉及预处理->编译->链接过程的不同末端。库通常会具有一个关联的头文件,该头文件包含其公共(外部)接口的声明。
答案 1 :(得分:0)
可以肯定地说,库包含可编译代码,而头文件不包含吗?
不是真的。
您需要区分两种不同的库格式:
静态/动态库:这些库已经被编译,它们不包含可编译代码。
源代码库:这些库包含需要编译的源代码。
在源代码库类别中,您可以找到各种格式/设计-尤其是单文件头库。
野外有许多single header libraries。 这些标头库将包含(或产生)代码。