仅包含一个#include-expression一次包含多个头文件吗?

Rob*_*rtS 7 c c++ syntax include header-files

语法是否有可能一次包含多个标头的表达式,而无需为每个新文件编写“ #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. */

Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 6

不,那里没有。

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

但是,您可以拥有一个“实用程序”标头,该标头除了包含您经常使用的许多其他标头之外什么也不做。然后,您只需包含一个实用程序标头。这是否是一个好主意,是一个意见问题。

如果您走这条路,请不要试图依赖于内部实现标头


JL2*_*210 5

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

#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <string.h>
Run Code Online (Sandbox Code Playgroud)

这适用于 C 和 C++。

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

  • 为什么投反对票?这个答案有什么我可以改进的地方吗? (3认同)

use*_*670 5

可以借助辅助标头(包括标头)来完成:

\n\n
#define HEADERS (<stdio.h>)(<stdlib.h>)(<curses.h>)(<string.h>)\n#include "Headers.inl"\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中Headers.inl按顺序执行包含每个项目的操作HEADERS

\n\n
// Headers.inl\n#include <boost/preprocessor/seq.hpp>\n\n#if(0 < BOOST_PP_SEQ_SIZE(HEADERS))\n#include BOOST_PP_SEQ_ELEM(0, HEADERS)\n#endif\n\n#if(1 < BOOST_PP_SEQ_SIZE(HEADERS))\n#include BOOST_PP_SEQ_ELEM(1, HEADERS)\n#endif\n\n#if(2 < BOOST_PP_SEQ_SIZE(HEADERS))\n#include BOOST_PP_SEQ_ELEM(2, HEADERS)\n#endif\n\n#if(3 < BOOST_PP_SEQ_SIZE(HEADERS))\n#include BOOST_PP_SEQ_ELEM(3, HEADERS)\n#endif\n\n\xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

  • 对于应该像“否”一样简单的答案来说,这实在是太多的预处理器技巧了。不过仍然很有趣。 (2认同)