Включить сразу несколько заголовочных файлов только с одним включенным выражением? - PullRequest
7 голосов
/ 12 октября 2019

Возможно ли выражение для синтаксиса, включающее несколько заголовков одновременно, без необходимости писать выражение "#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 ++.

Ответы [ 5 ]

6 голосов
/ 12 октября 2019

Нет, нет.

Напишите директиву #include для каждой операции включения, которую вы хотите выполнить.

Однако вы можете иметь заголовок "утилиты", который ничего не делаетно включите много других заголовков, которые вы часто используете. Затем вы просто включаете этот заголовок одной утилиты. Является ли это хорошей идеей или нет, это вопрос мнения.

Если вы пойдете по этому пути, не поддавайтесь искушению начать полагаться на внутренние заголовки реализации .

4 голосов
/ 12 октября 2019

Нет, нет способа сделать это. Вы должны напечатать (или скопировать) каждый #include в свою собственную строку, например:

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

Это относится как к C, так и к C ++.

Некоторые другие ответы обсуждаютсоздание другого заголовочного файла, который включает в себя каждый из них, но я не буду обсуждать, как это сделать. В целом, это плохая идея, которая вызывает проблемы, такие как загрязнение пространства имен и необходимость перекомпиляции при изменении этого заголовочного файла.

3 голосов
/ 12 октября 2019

Это может быть сделано с помощью вспомогательного заголовка, включая заголовок:

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

Где Headers.inl выполняет включение для каждого элемента в HEADERS последовательности:

// 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 и рекурсивного включения самого себя.

3 голосов
/ 12 октября 2019

Вы можете создать заголовочный файл со всеми общими включениями и включить его в свои файлы:

Файл common.h:

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

и в свой файл вы можете включить этот файлвместо:

#include <common.h>
3 голосов
/ 12 октября 2019

Для этого нет синтаксиса. Но если вы действительно хотите что-то подобное, просто создайте новый заголовок, который содержит только несколько операторов #include для нужных вам заголовков, а затем #include "combo-header.h" при необходимости. Я бы не одобрил это, хотя. Лучше включать то, что вы используете явно, где вы это используете - по нескольким причинам;время компиляции и загрязнение пространства имен являются главными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...