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

时间:2014-01-08 07:41:35

标签: c++ c class header

我总是使用C,当你有3个文件时,例如:tree.c,tree.h和main.c,在main.c中我总是包含tree.c和tree.c我总是包含树。 H。现在在C ++中这是一样的吗?因为我发现了一些教程,在tree.cpp中它们包含tree.h,而在main.cpp中它们也包含tree.h(而不是像C中那样的tree.cpp)。

抱歉,如果它令人困惑

4 个答案:

答案 0 :(得分:9)

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

当您包含“.c”(或重要的.cpp)文件时,您使用的是所谓的single compilation unit方法。

虽然有这种方法的倡导者(并且它在编译时有一些优势),但这不是通常所做的,这就是为什么你所指的教程包括.h文件。

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

答案 1 :(得分:2)

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

这个想法是,标题是外观,描述了公共接口。虽然c文件包含应该向用户隐藏的实际实现。当标题保持可访问状态时,可以将c文件编译为目标文件或库。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

C ++和C在这方面是相同的。你不应该#include其他C ++或C文件,只有头文件 - 不好说,但你在C中做的不是一个好习惯 - 它打破了文件范围的假设(影响文件范围{{ 1}}意味着,例如)它也意味着你不会受益于更快的编译周期,只有编译更改的文件才能获得。