C:Inclusiones dentro de los encabezados
-
05-07-2019 - |
Pregunta
Si tengo lo siguiente:
/*
* example.h
*/
#ifndef EXAMPLE
#define EXAMPLE
#include <stdio.h>
extern int parse_string(FILE *, char const*, const unsigned int);
#endif
¿Significará esto que el código que usa... #include example.h
...no tendrá que... #include example.h
's ...dependencias?( es decir: #include <stdio.h>
)
Solución
Correcto: esta es la razón por la cual es una buena práctica limitar los encabezados necesarios incluidos en otros encabezados. El preprocesador reemplazará el & Quot; #include & Quot; directiva con el contenido de stdio.h, para que su encabezado se vea así al compilador:
/*
* example.h
*/
#ifndef EXAMPLE
#define EXAMPLE
<contents of stdio.h>
extern int parse_string(FILE *, char const*, const unsigned int);
#endif
Otros consejos
Sí
Pero si el código depende de <stdio>
, probablemente debería incluirlo. (Después de todo, <=> también tiene protección de inclusión múltiple).
Si lo que desea es una inclusión maestra para su proyecto, continúe y haga una, pero haga que incluya las cabeceras reales y las cabeceras comunes del sistema, pero no prototipos, declaraciones o macros. Es decir, que el megaincluir no haga nada más que incluir. De esta manera, los módulos individuales pueden tomar sus propias decisiones a medida que el programa evoluciona.
Sí, puedes hacerlo y tendrá el efecto deseado.
Para su ejemplo particular necesita FILE
declarado en <stdio.h>, por lo que es bueno incluirlo.
Si se utiliza el prototipo parse_string() size_t
en lugar de unsigned int
y const char *
(para un nombre de archivo) en lugar de FILE *
, incluiría <stddef.h> en "example.h"
#ifndef EXAMPLE
#define EXAMPLE
#include <stddef.h> /* size_t typedef */
extern int parse_string(const char *filename, char const*, const size_t);
#endif