一次包含多个 header-files 而只有一个 #include-expression?

Include multiple header-files at once with only one #include-expression?

是否有任何表达式可以使语法一次包含多个 headers,而无需为每个新文件编写“#include”表达式?

喜欢,例如:

#include <stdio.h>, <stdlib.h>, <curses.h>, <string.h>  /* Dummy-Expression 1. */

OR

#include <stdio.h> <stdlib.h> <curses.h> <string.h>     /* Dummy-Expression 2. */

问题是针对 C 和 C++ 的。

没有,没有。

为您希望执行的每个包含操作编写一个 #include 指令。

但是,您可以有一个 "utility" header,它只包含您经常使用的许多其他 header。然后您只需包含那个实用程序 header。这是否是个好主意,见仁见智。

如果你沿着那条路走下去,don't be tempted to start relying on internal implementation headers

不,没有办法做到这一点。您必须将每个 #include 键入(或复制)到它自己的行,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <string.h>

这适用于 C 和 C++。

其他一些答案讨论了创建另一个包含其中每一个的头文件,但我不打算讨论这样做。这通常是一个坏主意,会导致名称空间污染和更改头文件时需要重新编译等问题。

没有语法。但是如果你真的想要这样的东西,那么只需创建一个新的header,它只包含你想要的header的多个#include语句然后在需要时 #include "combo-header.h"。 我不鼓励这样做。最好只在你使用它的地方包含你明确使用的东西——出于几个原因;编译时间和命名空间污染是最主要的。

您可以制作一个包含所有常见包含的头文件,并将其包含在您的文件中:

文件common.h:

#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <string.h>

并且在您的文件中,您可以改为包含该文件:

#include <common.h>

这可以在辅助 header 的帮助下完成,包括 header:

#define HEADERS (<stdio.h>)(<stdlib.h>)(<curses.h>)(<string.h>)
#include "Headers.inl"

其中 Headers.inlHEADERS 序列中的每个项目执行包含:

// Headers.inl
#include <boost/preprocessor/seq.hpp>

#if(0 < BOOST_PP_SEQ_SIZE(HEADERS))
#include BOOST_PP_SEQ_ELEM(0, HEADERS)
#endif

#if(1 < BOOST_PP_SEQ_SIZE(HEADERS))
#include BOOST_PP_SEQ_ELEM(1, HEADERS)
#endif

#if(2 < BOOST_PP_SEQ_SIZE(HEADERS))
#include BOOST_PP_SEQ_ELEM(2, HEADERS)
#endif

#if(3 < BOOST_PP_SEQ_SIZE(HEADERS))
#include BOOST_PP_SEQ_ELEM(3, HEADERS)
#endif

…

它可能可以通过让 boost 预处理器处理所有重复 BOOST_PP_SEQ_POP_FRONT 和递归包含自身来简化。

是的,你可以使用#include 该头文件包括所有标准头文件。唯一的问题是,它会包含很多程序不需要的不必要文件,而且,由于它包含很多头文件,因此编译时间会增加。 如果您在程序中经常使用某些特定的头文件,那么您可以创建自己的头文件并将所需的文件包含在您创建的文件中。