这是包含源文件的好习惯吗?
我正在使用函数。 是不是很好的做法,我在另一个.cpp文件中编写函数,并将其包含在主函数中? 像这样:#include“lehel.cpp”。这是包含源文件的好习惯吗?
这是好的,还是应该直接在main.cpp文件中写入函数?
一个好的做法是将功能分成单独的软件单元,以便它们可以重复使用,以便更改一个单元对其他单元几乎没有影响。
如果main
包含lehel.cpp
,这意味着lehel.cpp
中的任何更改都会强制编制main
。但是,如果lehel.cpp
单独编译并链接,则更改为lehel.cpp
不会强制main
重新编译;只有链接在一起。
恕我直言,头文件应包含如何使用函数的信息。源文件应该包含函数的实现。源文件中的功能应与主题相关联。另外,保持源文件的大小会减少注入缺陷的数量。
已建立的做法是将可重用函数的函数声明放入.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
文件只是有时被用来从声明分裂模板定义,但即使这种用法是有争议的,因为有反方案创建对(0 (foo.hpp
和foo_fwd.hpp
)。
因此,它更好,如果我在main.cpp文件中声明了该函数。我是一个初学者:) –
我建议你只是创建一个头文件,而不是在main中声明它。 – krzaq
的'的#pragma once'好处是,如果它不支持的编译器被允许悄悄地丢弃它,留给你不知道你有没有包括警卫。可笑的hi-jinks随之而来。它也有一些与符号链接和网络挂载有关的问题,除了它只是桃色之外。确保你的编译器支持扩展,并且你不会移植到其他编译器,并保持你的编译系统简单和本地,你很好。 – user4581301
头文件(.h
)旨在提供多个文件所需的信息。像类声明,函数原型和枚举这样的东西通常放在头文件中。总之,“定义”。
代码文件(.cpp
)旨在提供只需要在一个文件中知道的实现信息。通常,函数体和内部变量应该/将永远不会被其他模块访问,属于.cpp
文件。总之,“实施”。
最简单的问题来问问自己,以确定什么属于哪里“如果我改变这个,我将不得不改变其他文件中的代码,使事情再次编译?”如果答案是“是”,它可能属于头文件;如果答案是“否”,它可能属于代码文件。
https://stackoverflow.com/a/1945866/3323444
要回答你的问题,作为一个程序员这将是一个不好的做法,增加一个功能,当CPP给你头文件包含。
通常它不这样做(和头被使用)。然而,有一种称为“合并”的技术,这意味着将所有(或一堆).cpp文件包括在一个主要的.cpp文件中,并将其构建为一个单元。
为什么它可能有时做的原因是:
- 有时竟快相比,分别建立的所有文件(其中一个原因可能是,例如,该首部宣读了“联军”大单元的编译时间只有一次,而不是每个.cpp文件分开)
- 更好的优化机会 - 编译器将整个源代码视为一个整体,因此它可以跨合并的.cpp文件做出更好的优化决策(如果每个文件都是可能的单独编译)
我曾经使用的改善更大项目的编译时间 - 基本上创建多个(8)基本源文件,其中每个包括在cpp文件的一部分,然后被建立并联。完全重建后,该项目的建造速度提高了约40%。
然而,如所提到的,当然原因单个文件的变化重建构成单元,其可以是连续的开发过程中的缺点的。
你可能想了解的头文件。 – jaggedSpire
一个应该几乎/永远不会包含cpp文件 – NathanOliver
这可能有所帮助:http://stackoverflow.com/questions/333889/why-have-header-files-and-cpp-files-in-c – vu1p3n0x