gpt4 book ai didi

c++: #include 和不同的文件类型

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:46 24 4
gpt4 key购买 nike

我不知何故无法理解这个想法,阅读文档对我没有帮助。

我的问题是:

  1. 当我包含头文件#include "general.h"时,在我的项目目录中有两个文件 general.h 和 general.cpp,这是否意味着预编译器会自动找到 .cpp 文件?
  2. 我可以包含没有扩展名的文件吗:#include "general"?
  3. 我可以包含一个没有任何头文件的文件吗:#include "general.cpp"?
  4. 我可以包含一个 txt 文件吗:#include "general.txt"?

我在 Visual Studio 2010 中尝试了这一切。至少没有语法错误。但我想要一个解释。所以,我希望你能善待我,帮助我。

最佳答案

标准和编译器不太关心文件是.cpp 还是.h 还是.monkeyface。将源代码结构化为实现和头文件的概念实际上是帮助管理源代码的公认方法。尽管如此,不以可接受的方式构建源代码通常被认为是不正确或糟糕的 C++。

#include 所做的只是告诉预处理器在当前文件中包含您指定的文件的内容。这就像将其他文件复制并粘贴到您的文件中。当你说#include "foo.h"时,它只包含foo.h的内容,并不关心foo.cpp根本 - 它甚至不知道它存在(并且没有理由必须存在)。

在实现和头文件中构建源代码非常有用——它避免了依赖性和多重定义的问题,并且还稍微缩短了编译时间。当你的代码使用另一个类时,你只需要#include那个类的头文件。原因是因为你的代码不需要关心类的实现,它只需要知道它长什么样(它的名字、成员、基类等等)。它不关心成员函数的具体实现方式。

扩展名.cpp.h 只是约定。有些人更喜欢使用 .hpp 作为头文件。有些人甚至使用 .tpp 来实现模板。您可以随意命名它们 - 是的,您甚至可以包含一个 .txt 文件。您的编译器可能会尝试从文件扩展名推断出有关文件的信息(例如,将其编译为哪种语言),但这通常是可以覆盖的。

因此,如果您的 main.cpp 包含 foo.h,因为它使用类 foo,那么 foo.cpp 在什么时候执行 参与进来?嗯,在main.cpp的编译中,完全没有涉及到。 main.cpp 不需要知道类的实现,正如我们上面讨论的那样。但是,在编译整个程序时,您会将每个 .cpp 文件传递​​给编译器以单独编译。也就是说,您将执行类似于 g++ main.cpp foo.cpp 的操作。编译 foo.cpp 时,它将包含 需要编译的 header 。

在编译每个 .cpp 文件后(包括它们所依赖的 header ),然后将它们链接在一起。在 main.cpp 中使用成员函数 foo::bar() 将在这个阶段链接到 foo::bar()< 的实现foo.cpp 中给出。

关于c++: #include 和不同的文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com