包括头文件和Main.h

时间:2013-06-26 08:26:37

标签: c++ include header-files

好吧不确定这是正确的方式,还是正确的方式,但我已经看到了并开始使用它,假设你有6个文件

main.cpp
main.h

car.cpp
car.h

speed.cpp
speed.h
  • 1st - 你应该有一个main.h吗?
  • 2nd - 如果main.h有#include car.h和#include speed.h那么 car / speed.cpp你只需要添加#main.h(因此它会 包括car / speed.h)
  • 第3名 - 你应该去那条路吗?

6 个答案:

答案 0 :(得分:9)

最简单的

#include。包含的原因应该是,如果删除,代码就不会编译。

当您可以转发声明时,请不要#include。如果是“A级”;就行了,不要#include a.h

特别喜欢在头文件中转发声明,避免生成高度耦合的超级包含文件的嵌套包含。

另请参阅相关问题中的Self-sufficient header files

答案 1 :(得分:3)

1)只有当您需要将main.cpp中的内容暴露给其他cpp文件时,才取决于它具有的内容。

2)可能但不推荐。

3)由于多种原因(代码设计,编译时间等),您希望尽可能少地包含。此外,它的类约定为.h.cpp,而其中一个直接包含另一个。您还应该尝试在.cpp文件中包含标题,并尝试尽可能避免包含标题的标题。

答案 2 :(得分:2)

通常没有main.h。我认为最好不要只在标题中包含源文件中所需的所有标题。如果您依赖标题来包含您需要的所有内容,则标题中的更改可能会破坏您的源文件。

答案 3 :(得分:1)

拥有“main.h”并不典型 - 但肯定没有禁止它的规则。

至于需要包含哪些内容,以及如何实现这一目标,实际上取决于各个课程的作用,以及他们对所需要的知识。

在您描述的样式中包含“包含其他所有内容的一个包含文件”通常被认为是一个坏主意。有几个原因:  1.很难看出哪个源文件取决于哪个包含。  2.编译时间越长,因为编译器必须读取一堆未使用的类定义。  你不能轻易地把“car.h”和“car.cpp”拿到另一个没有“speed.h”的项目中。

答案 4 :(得分:1)

  第1页 - 你应该有一个main.h吗?

很少。 main.cpp意味着它正在编译包含main()的翻译单元,这通常是其他低级库的客户端代码,不需要知道main()中的符号。如果某些事情在你的设计中变得循环,并且有充分的理由(巨大的时间压力?)不要将你要分成的东西分成单独的.cpp,那么你最终可能得到main.h 。这应该只在main.cpp中声明其他翻译单元可能需要访问的符号。具体来说,它不应该包含car.h和/或speed.h,除非暴露需要car.h或speed.h声明的main.h函数 - 例如,main.cpp中一个带有类型参数的函数声明来自car.h或speed.h。

  

第二 - 如果main.h有#include car.h和#include speed.h那么在car / speed.cpp中你只需添加#main.h(因此它将包含car / speed.h)< / p>

如上所述,这几乎肯定是一个非常破碎的设计:main.cpp应该直接包含car.h和speed.h,如果它不想这样做,则需要更高级别的头文件对于car.h和speed.h,它应该根据它们的总体主题(例如transport.h)命名,而不是以想要访问它们的特定客户端命名。请记住,只有在需要从main.cpp中公开内容时才应该存在main.h。

  第三 - 你应该去那条路吗?

可能不是,鉴于我上面已经解释过的。

答案 5 :(得分:0)

您应该为要在代码中使用的源文件创建头文件。因此,不太可能 - 不是不可能 - 你必须创建一个main.h头文件,因为在car.cpp和speed.cpp中你可能不包含你在main.cpp中声明的函数。相比之下,您可能在main.cpp中包含car.cpp和speed.cpp的功能,因此您希望在主文件中包含它们的标题。