c++ - ¿Incluye múltiples archivos de encabezado a la vez con una sola#inclusión-expresión?
syntax include (5)
¿Hay alguna expresión posible para que la sintaxis incluya múltiples encabezados a la vez, sin necesidad de escribir la expresión "#include" para cada archivo nuevo?
Como por ejemplo:
#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. */
La pregunta es para C y C ++.
No hay sintaxis para eso.
Pero si
realmente
quiere algo así, simplemente cree un nuevo encabezado que no contenga más que varias declaraciones
#include
para los encabezados que desee y luego
#include "combo-header.h"
cuando sea necesario.
Sin embargo, desalentaría esto.
Es mejor incluir solo lo que usa explícitamente donde lo usa, por varias razones;
compilar el tiempo y la contaminación del espacio de nombres son los principales.
No no hay.
Escriba una directiva
#include
para cada operación de inclusión que desee realizar.
Sin embargo, podría tener un encabezado de "utilidad" que no hace más que incluir muchos otros encabezados que utiliza con frecuencia. Luego, solo incluye ese encabezado de utilidad. Si esta es una buena idea o no, es una cuestión de opinión.
Si sigue esa ruta, no se sienta tentado a comenzar a confiar en los encabezados de implementación internos .
No, no hay forma de hacer esto.
Debe escribir (o copiar) cada
#include
en su propia línea, de esta manera:
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <string.h>
Esto se aplica tanto a C como a C ++.
Algunas de las otras respuestas discuten la creación de otro archivo de encabezado que incluya cada uno de estos, pero no voy a discutir hacer eso. En general, es una mala idea y causa problemas como la contaminación del espacio de nombres y la necesidad de volver a compilar cuando cambia ese archivo de encabezado.
Puede crear un archivo de encabezado con todas las inclusiones comunes e incluirlo en sus archivos:
Archivo
common.h
:
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <string.h>
y en su archivo puede incluir ese archivo en su lugar:
#include <common.h>
Se puede hacer con una ayuda de encabezado auxiliar que incluye el encabezado:
#define HEADERS (<stdio.h>)(<stdlib.h>)(<curses.h>)(<string.h>)
#include "Headers.inl"
Donde realiza
Headers.inl
incluye para cada elemento en la secuencia
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
…
Probablemente se pueda simplificar permitiendo que el preprocesador boost maneje todas las repeticiones con
BOOST_PP_SEQ_POP_FRONT
y se incluya recursivamente.