use*_*702 5 c c++ compiler-construction header
根据维基百科,这是C预处理器的作用:
"预处理器用
#include <stdio.h>文件'stdio.h' 的文本替换该行,该文件声明了该printf()函数."
所以,如果这是真的,包含更多头文件的程序将需要更多时间来编译?
通常是的,"包含更多头文件的程序将花费更多时间来编译".
不幸的是,标题的预处理内容可以根据定义的宏符号和方式而变化.特别是微软的标题通常设计为根据这些符号产生不同的结果(在标准C++中,它主要只是NDEBUG影响扩展的符号assert).因此编译器是保守的,并且为每个翻译单元一次又一次地进行预处理和头文件编译.
避免这种情况的一种常见技术是所谓的预编译头.
据我所知,一种不常见的技术,可能不是由任何编译器实现的,是允许程序员说"对于这批编译,你可以假设所有头文件将扩展为相同",甚至可能默认为(即使假设不成立,也可以从标准C++中得到不同的结果).
我非常喜欢后一种方法,因为它会加速大多数构建,但预编译头文件是我们在实践中所拥有的.
David Vandevoorde致力于C++ 的模块提案.
模块语言示例:Modula-2,Ada,UCSD Pascal.
不幸的是它还没有为C++ 11做好准备,但也许我们稍后会得到模块.
所以,如果这是真的,包含更多头文件的程序将需要更多时间来编译?
当然.严格地说,编译器需要查看的代码越多,处理它所需的时间就越多.对于一些非常大的项目,查看所有文件所需的时间很容易成为一个问题.对于非常大和/或复杂的模板代码尤其如此,出于实际原因,该代码必须驻留在头文件中.头文件本身的组织也会对编译时间产生影响.
但是,它并不像你想象的那么简单.它高度依赖于编译器的实现质量(QOI),而现代编译器在大多数情况下实际上非常擅长处理头文件.
例如,GCC专门识别包括防护装置以减少处理时间.现在,编译器在处理复杂的模板代码方面要好得多,例如大多数标准库.在VC++编译器上,包括windows.h(几乎包含整个 Windows API的函数原型)在我的经验中并没有明显增加编译时间.如果所有其他方法都失败了,很多(如果不是所有)编译器都有一个" 预编译头 "功能可以使用.
基本上,不要担心它,直到它成为一个问题.如果有更多的头文件有助于更好地组织您的代码,那么无论如何都要毫不犹豫地使用它们.
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |