简单地包含所有头文件是正确的吗?

记住系统头文件的名称很痛苦……

有没有办法一次包含所有现有的头文件?

为什么没有人这样做?

包含不需要的头文件是一种非常糟糕的做法。 减慢编译速度的问题可能也可能不重要; 更大的问题是它隐藏了依赖关系 。 您在源文件中包含的头文件集应该是模块所依赖的function的文档,并且与外部文档或注释不同,编译器会自动检查它是否完整(未包含所需的头文件将导致错误)。 确保不存在不必要的依赖性不仅可以提高可移植性; 它还可以帮助您跟踪不需要的和潜在危险的交互,例如,应该是纯粹计算或纯粹数据结构管理的模块正在访问文件系统的情况。

这些原则适用于标头是您自己的程序或第三方库中的模块的标准系统标头或标头。

您的源代码文件在编译器查看之前已经过预处理,而#include语句是预处理器使用的指令之一。 在进行预处理时, #include语句将替换为所包含文件的全部内容。 包含所有系统文件的结果将是编译器需要处理的非常大的源文件,这将在编译期间花费大量时间。

没有人包含所有头文件。 有太多,其中一些与其他文件(如ncurses.h和curses.h)互斥。

从头开始编写程序时,实际上并没有那么糟糕。 一些很容易记住:stdio.h用于任何FILE东西; ctype.h用于任何字符分类,alloc.h用于任何使用malloc()等。

如果你不记得一个:

  • 离开#include
  • 检查前几条错误消息,以指示缺少的头文件,例如某些未声明的类型,或调用具有假定参数类型的函数
  • 弄清楚哪个函数调用是原因
  • 查看该函数的手册页(或编译器的任何文档)
  • 注意文档中显示的#include并添加它
  • 重复,直到所有错误都修复

添加到现有代码库要容易得多。 你可以上几百或几千个工作小时,而不必添加#include

不,这是一个糟糕的想法,并将大量增加您的编译时间,并可能通过包含大量未使用的代码使您的exe更大。

我知道你在谈论什么,但是我需要仔细检查我正在使用的函数的函数原型(对于那些我每天都不使用的函数) – 我只需要复制并粘贴#includes直接从相关函数的联机帮助页面中删除。 我已经在查看联机帮助页(这是一个简单的K in vim(1) ),所以它不会是一个额外的负担。

您可以创建一个“主”标题,将所有包含放入其中。 然后在其他一切包括它! 谨防冲突的定义和循环引用……所以…… Master1.h,master2.h,…

不提倡它。 只是说。