记住系统头文件的名称很痛苦......
有没有办法一次性包含所有现有的头文件?
为什么没有人这样做?
答案 0 :(得分:9)
包含不需要的头文件是一种非常糟糕的做法。减慢编译速度的问题可能也可能不重要;更大的问题是它隐藏了依赖关系。您在源文件中包含的头文件集应该是模块所依赖的功能的文档,并且与外部文档或注释不同,编译器会自动检查它是否完整(未包含所需的头文件将导致错误)。确保不存在不必要的依赖性不仅可以提高可移植性;它还可以帮助您跟踪不需要的和潜在危险的交互,例如,应该是纯粹计算或纯数据结构管理的模块正在访问文件系统。
这些原则适用于标头是您自己的程序或第三方库中的模块的标准系统标头或标头。
答案 1 :(得分:5)
您的源代码文件在编译器查看之前已经过预处理,#include
语句是预处理器使用的指令之一。在进行预处理时,#include
语句将替换为所包含文件的全部内容。包含所有系统文件的结果将是编译器需要处理的非常大的源文件,这将在编译期间花费大量时间。
答案 2 :(得分:5)
没有人包含所有头文件。有太多,其中一些与其他文件互斥(如ncurses.h和curses.h)。
即使从头开始编写程序也没那么糟糕。一些很容易记住:任何FILE
东西的stdio.h; ctype.h用于任何字符分类,alloc.h用于任何使用malloc()等。
如果你不记得一个:
#include
#include
并添加添加到现有代码库要容易得多。您可以花费数百或数千个工作小时,而无需添加#include
。
答案 3 :(得分:1)
不,这是一个糟糕的想法,并且会大量增加您的编译时间,并且可能通过包含大量未使用的代码来使您的exe更大。
答案 4 :(得分:1)
我知道你在谈论什么,但我需要仔细检查我正在使用的功能的原型(对于那些我每天都不使用的功能) - 我只需复制并粘贴#includes
直接从相关函数的联机帮助页中删除。我已经在查看联机帮助页(在K
中这是一个简单的vim(1)
),所以它不会是额外的负担。
答案 5 :(得分:1)
您可以创建一个“主”标题,您可以将所有包含放入其中。然后在其他一切包括它!谨防冲突的定义和循环引用......所以.... Master1.h,master2.h,...
不提倡它。只是说。