为什么`include <iostream>`最终包括* many * files?</iostream>

时间:2009-12-04 16:57:39

标签: c++ include iostream

跟进此question

当我include <iostream>时 碰巧它包含来自/usr/includegrep "\usr\include"超过g++ -E prog.cpp的许多文件,大约有1260个条目;)。

他们是否有办法控制各种档案? 平台:Linux
G ++版本:4.2.4

3 个答案:

答案 0 :(得分:11)

不,<iostream>包含它们,因为它直接依赖于它们,或者它的依赖性取决于它们。

你无能为力。

您可以(取决于您的编译器)使用Precompiled Headers

限制它对编译时间的影响

答案 1 :(得分:3)

我的建议是不要担心编译器包含多少文件。更多关注正确性,稳健性,时间表。如果构建时间是一个问题,请获得更快的机器,一夜之间构建,继续散步,或将代码划分为更小的翻译单元。翻译单元应足够小,以包含不经常更改的代码。 变化是邪恶的。

构建系统的基础是只编译已更改的少数文件。如果您的开发过程正常运行,随着项目的增长,构建时间将越来越多地存在于链接阶段。

如果编译时间仍然很长,请查看您的编译器是否支持预编译头。通常,这是编译器以更有效的形式存储所有声明和定义的方法。

答案 2 :(得分:2)

您需要使用流时#include <iostream>。这应该定义你需要的一些东西。它需要多少活动才能实现质量问题。您可以从/usr/include中删除文件,但这会破坏事情。

我真的怀疑它包括1260个文件。几乎可以肯定,大多数是重复的条目,不加载任何东西,但不会从-E输出中删除。