c++ c syntax include header-files

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.