【发布时间】:2018-07-10 01:57:00
【问题描述】:
当在 C++ 中创建一个类,或者在 C 中使用 structs 创建一个 等价物 时,最好将它分成两个文件:一个头文件(用于声明)和一个实现文件(用于实际定义方法等)。
这样做是因为如果方法定义存在于多个文件中,它们可能会发生冲突(并且包含保护不能阻止这种情况,因为宏只存在于定义它们的文件中,并被复制到包含它们的文件中; 包含守卫防止在同一个文件中多次包含同一个标题)
然而,似乎许多标准 C 库实际上定义了一些东西。让我们以 C 语言中的 stdlib.h 为例。这个库似乎定义了一个名为malloc 的方法来分配内存。但是(当然)如果我在多个文件中包含 stdlib.h,则 malloc 的方法定义似乎没有冲突。
换句话说,如果我要使用自己的内存分配方法创建自己的库(假设它不是宏函数),我将不得不在mylib.h 中声明它并在mylib.c 中实际定义它,但是这个由于某种原因,它似乎不适用于stdlib.h。
这是如何工作的?为什么标准 C 库可以做到这一点,而用户定义的标头(不幸的是,在我看来)却不能?
【问题讨论】:
-
标准库头文件只声明函数。这些函数在库中定义,通常是自动链接的(数学函数除外),但如果您正在为独立环境进行编译,通常可以要求编译器不要这样做。
标签: c class include c-standard-library