包含 .h 文件和 c/cpp 文件有什么区别?

3

大家都指出了“一个定义规则”。我不打算在c/cpp文件中定义任何东西,而是只用它们进行声明。

一个cpp文件:

int add(int x, int y);

另一个cpp文件:
#include<one.cpp>
int add(int x, int y)
{
    return x + y;
}

另一个cpp文件:
#include<one.cpp>
int main()
{
    int result = add(2,2);
}

基本上是一样的,只是用 .cpp 代替了 .h。有什么区别吗? 这里不适用于一个定义规则。 还有最后一个问题,为什么每个人都说使用头文件和这种技术可以减少编译时间?具体是怎么工作的呢?


文件后缀实际上并不是必要的。重要的是:作为翻译单元(要编译的文件)提供给编译器的内容以及被该文件包含的内容。在这两种情况下,您可以使用任何文件后缀,但这可能会使其他读者感到困惑... - Scheff's Cat
7
实际上并没有区别;事实上,C++标准库的源文件甚至没有扩展名。任何区别只是因为使用约定不同而已。 - meowgoesthedog
@spug有道理。谢谢你。那最后一个问题呢? - user8006382
请一个问题一个问题地提问,Richard。Stack Overflow不是讨论板块。 - Lightness Races in Orbit
1个回答

6
编译器不关心文件扩展名,因此对编译器来说没有区别。重要的是这是一个众所周知和被接受的惯例,即声明(某物做什么)放在.h文件中,定义和实现(如何实现)放在.cpp文件中。如果您不遵循这个惯例,将会让其他读者感到困惑,如果您将来要参与更大的项目,这是一个很大的问题。然后你会成为那个没有人愿意与之合作的人,因为你会让其他项目成员感到困惑,最终你会失去工作,只因为你不能遵循那个该死的惯例。
并且,是的,最后一个问题,为什么每个人都说使用头文件和这种技术可以减少编译时间?这究竟是怎么回事? 我认为你指的是预编译头文件,在这种情况下,这个问题有一些很好的答案,请参考这个问题

即使你没有使用PCHs,将定义放在cpp文件中(而不是在类声明中内联方法)也有好处,因为编译器只需要编译一次代码。当只更改部分代码以避免完全重新编译时,这也非常有用。 - monoceres
如果你不遵循这个约定,你会让其他读者感到困惑。几个月后当你忘记代码如何工作时,你也会感到困惑(问我怎么知道的...)。 - Chris Parker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接