C++中的头文件与 C 不同

Header file in C++ different from C

本文关键字:不同 文件 C++      更新时间:2023-10-16
我总是使用 C,当你有 3 个文件时,例如:tree.c、tree.h 和 main.c,在 main.c 中我总是包含 tree.c

,在 tree.c 中我总是包含 tree.h。现在C++这是一样的吗?由于我找到了一些教程,其中在 tree 中.cpp它们包括 tree.h 和 main.cpp它们还包括 tree.h(而不是 tree.cpp如 C 中的)。

抱歉,如果令人困惑

C 和 C++ 之间的文件包含机制没有区别。

当您包含".c"(或.cpp)文件时,您使用的是所谓的单一编译单元方法。

尽管有这种方法的倡导者(并且在编译时间方面具有某种优势),但这不是通常的做法,这就是为什么您所指的教程包含 .h 文件的原因。

我并不是想争论什么是最佳实践,但使用单个编译单元并不容易,因为范围可能变得非常难以管理。我建议您仅在严格需要时才使用它(如果有的话),并依靠包含.h文件作为您的主要选择。

即使在 C 中,我也会在 main.h 中包含 tree.h 而不是 tree.c。因此,C++没有什么不同。

这个想法是,标题是描述公共接口的外观。而 c 文件包含应向用户隐藏的实际实现。c文件可以编译为目标文件或库,同时标头保持可访问性。

您不会在其他源代码中包含源代码(.c/.cpp),而仅包含标头(.h/.hpp)。将所有 (.c/cpp) 源文件编译为目标文件,并将其链接到可执行文件。您在C++教程中找到的内容对于 C 也是正确且有效的。

C++和C在这方面是相同的。你不应该#include其他C++或 C 文件,只头文件 - 很抱歉,但你在 C 中所做的不是一个好的做法 - 它打破了对文件范围的假设(例如,这会影响文件范围static的含义),这也意味着你不会从更快的编译周期中受益,而更快的编译周期只能通过编译更改的文件来获得。