这是一个包含源文件的好习惯吗?

时间:2016-09-26 19:44:29

标签: c++

我正在使用函数。 这是一个好习惯,我在另一个.cpp文件中编写该函数,并将其包含在主文件中? 像这样:#include“lehel.cpp”。

这样可以,还是应该直接在main.cpp文件中编写函数?

4 个答案:

答案 0 :(得分:4)

既定的做法是将可重用函数的函数声明放在.h.hpp文件中,并将该文件包含在需要它们的位置。

Foo.cpp中

int foo()
{
     return 42;
}

foo.hpp

#ifndef FOO_HPP // include guards
#define FOO_HPP

int foo();

#endif // FOO_HPP

的main.cpp

#include "foo.hpp"

int main()
{
     return foo();
}

包含.cpp文件有时仅用于从声明中拆分模板定义,但即使这种使用也存在争议,因为存在创建对的计数方案(foo_impl.hppfoo.hpp)或(foo.hppfoo_fwd.hpp)。

答案 1 :(得分:4)

一个好的做法是将功能分离到单独的软件单元中,以便可以重复使用它们,以便对一个单元的更改对其他单元几乎没有影响。

如果lehel.cpp包含main,则表示lehel.cpp中的任何更改都会强制编译main。但是,如果lehel.cpp是单独编译并链接的,则对lehel.cpp的更改不会强制重新编译main;只联系在一起。

恕我直言,头文件应包含有关如何使用这些功能的信息。源文件应包含函数的实现。源文件中的函数应与主题相关联。此外,保持源文件的大小将减少注入缺陷的数量。

答案 2 :(得分:0)

标头文件(.h)旨在提供多个文件中所需的信息。类声明,函数原型和枚举等内容通常都在头文件中。总之,"定义"。

代码文件(.cpp)旨在提供只需要在一个文件中知道的实现信息。通常,函数体和其他模块应该/永远不会访问的内部变量属于.cpp文件。总之,"实施"。

要问自己确定属于哪个地方的最简单的问题是"如果我改变了这个问题,我是否必须更改其他文件中的代码以使事情再次编译?"如果答案是"是"它可能属于头文件;如果答案是"否"它可能属于代码文件。

https://stackoverflow.com/a/1945866/3323444

要回答您的问题,作为程序员,当cpp为您提供要包含的头文件时添加函数将是一种不好的做法。

答案 3 :(得分:0)

通常没有完成(并且使用了标题)。但是,有一种称为“合并”的技术,这意味着将所有(或一堆).cpp文件包含在一个主.cpp文件中,并将其构建为一个单元。

有时可能会这样做的原因是:

  • 与单独构建所有文件相比,“合并”大单元的编译时间实际上更快(例如,一个原因可能是标题只读取一次而不是每个.cpp文件一次)
  • 更好的优化机会 - 编译器将所有源代码视为一个整体,因此它可以在合并的.cpp文件中做出更好的优化决策(如果每个文件是单独编译的,这可能是不可能的)

我曾经用它来改进更大项目的编译时间 - 基本上创建了多个(8)基本源文件,每个文件都包含部分.cpp文件,然后并行构建。在完全重建时,该项目的构建速度提高了约40%。

然而,如上所述,更改单个文件当然会导致重建该组合单元,这在持续开发过程中可能是一个缺点。