在 C++ 中创建一个类,或在 C 中使用structs创建一个等价类时,最好将其分成两个文件:一个头文件(用于声明)和一个实现文件(用于实际定义方法等)。
这样做是因为如果方法定义存在于多个文件中,它们可能会发生冲突(并且包含保护不能阻止这种情况,因为宏只存在于定义它们的文件中,并被复制到包含它们的文件中;包含保护防止在同一个文件中多次包含相同的标题)
然而,似乎许多标准 C 库实际上定义了一些东西。让我们stdlib.h
以 C 语言为例。这个库似乎定义了一个malloc
分配内存的方法。但是(当然)如果我包含stdlib.h
在多个文件中,则 malloc 的方法定义似乎没有冲突。
换句话说,如果我要使用自己的内存分配方法创建自己的库(假设它不是宏函数),我将不得不在其中声明它mylib.h
并实际定义它,mylib.c
但这似乎不适stdlib.h
用于某种原因.
这是如何运作的?为什么标准 C 库可以做到这一点,但用户定义的标头(不幸的是,在我看来)不能?