gpt4 book ai didi

C++多文件编译过程

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:17 25 4
gpt4 key购买 nike

我正在尝试尽量减少项目中的 header 包含,最大限度地使用前向声明,并且需要弄清楚 C++ 编译过程的工作原理。

它从我们分配对象 A 的 main.cpp 开始,因此我们包含 A.h。 A 类使用 B 类和 C 类,所以我包括 B.h 和 C.h。现在,如果我想在 main.cpp 中分配 B,编译将失败。

我可以轻松地将 B.h 包含在 main.cpp 中,但我想知道它是否真的有必要,因为我已经包含了 A.h 并且在 A.h 中我包含了 B.h。我读过一些关于这个主题的先前讨论,其中有一些关于源文件的递归和重新编译的内容。那么它到底是如何工作的呢?

感谢您的任何建议。 :)

最佳答案

作为一个简单的经验法则,您需要在需要对齐、界面或大小时随时定义符号。如果一个头仅仅引用一个类型作为指针,你只需要声明它。

所有引用 header 的编译单元都必须独立理解它。这就是为什么 header 中的代码会超线性地增加编译时间。

如果您有兴趣,可以确切地看到预处理器为编译器准备了什么。 GCC 具有以下语法。

g++ -E main.cpp

MSVC 具有类似的功能,但我无法引用它。

I can easily include B.h in main.cpp, but I'm wondering if its really necessary, because I'm already including A.h and in A.h I'm including B.h

我想这是一个环境问题。省略 header 的主要烦恼是,通常发生的情况是其他人更改了代码库的不同部分中的某些内容,并且您必须猜测为什么在从源代码管理更新时缺少符号。本质上,您在根本不明确的 header 之间创建了依赖关系。

如果我的突发奇想成真,您可以将包含添加到一个空 cpp 文件中的任何 header ,它就会编译。我不明白你为什么不想要那个,尽管我不准备捍卫它作为在所有情况下都应该做的正确事情。

关于C++多文件编译过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7640935/

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