例如,当我用C ++定义一个类文件时,我总是把函数体放在类头文件(.h)中和类定义一起。源代码文件(.cpp)是具有main()函数的文件。现在这通常是在pro c ++程序员中完成的,还是遵循单独的头/源代码文件的惯例。
对于Native C,我注意到在GCC中完成(当然还有Visual Studio for Windows中的头文件)。
这只是一个惯例吗?或者有这个原因吗?
将函数体放入.cpp
文件中以实现以下目的:
这是一项惯例,但也取决于具体需求。例如,如果您正在编写一个希望功能快速(内联)的库,并且您正在为其他人设计库以用作简单的header only
库,那么您可以在头文件中编写所有代码(s )本身。
另一方面;如果您正在编写将静态或动态链接的库,并且您正在尝试封装来自用户的内部对象数据。您的函数 - 类成员函数等将以他们应该执行的操作的方式编写,以便库代码的用户不必担心该部分的实际实现细节被隐藏。所有他们需要知道的功能和类是他们的接口。以这种方式,您将拥有头文件和实现文件。
如果将函数定义及其声明放在头文件中,它们将是内联的,并且应该运行得更快,但是可执行文件会更大,并且每次都必须编译它们。实现细节也向用户公开。
如果将函数定义放在标题的相关代码文件中,它们将不是内联的,您的代码会更小,运行速度可能会慢一点,但您只需要编译一次。实现细节被隐藏并从用户抽象出来。
绝对没有理由将函数体放在'c'中的头文件中。如果头文件包含在多个'c'文件中,这将迫使编译器多次定义该函数。如果函数是'static',程序中会有多个副本,如果它是全局的,链接器会抱怨。
类似的推理是针对c ++的。例外的是“内联”成员和一些模板实现。
如果在'cpp'文件中定义一个临时类,那么在那里定义它并在类中定义函数体是完全可以的。