C ++多文件编译过程

时间:2011-10-03 21:33:25

标签: c++ compilation

我正在尝试最小化项目中的头部包含,最大化前向声明的使用,并且需要弄清楚C ++编译过程的确切运作方式。

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

我很容易在main.cpp中包含B.h,但我想知道它是否真的有必要,因为我已经包括A.h而在A.h我包括B.h.我读了一些关于这个主题的讨论,其中有一些关于递归和重新编译源文件的内容。那究竟是如何运作的呢?

感谢您的任何建议。 :)

1 个答案:

答案 0 :(得分:1)

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

所有引用标题的编译单元都必须经过独立理解的步伐。这就是为什么标题中的代码会超线性地增加编译时间的原因。

如果您感兴趣,可以准确了解预处理器为编译器准备的内容。 GCC具有以下语法。

g++ -E main.cpp

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

  

我可以很容易地在main.cpp中包含B.h,但我想知道它是否真的   必要的,因为我已经包括了A.h而且我已经包括了   B.h

我认为这是一个环境问题。省略标题的主要烦恼是,通常发生的事情是其他人在代码库的不同部分中更改某些内容,并且您必须猜测从源代码控制更新时丢失符号的原因。基本上,您在头文件之间创建了根本不清楚的依赖关系。

如果我的想法是法律,你可以将一个include抛出到空cpp文件中的任何标题,它就会编译。我不明白你为什么不想要这个,虽然我不准备在所有情况下都把它作为正确的事情来保护它。