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> )

¿Fue útil?

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

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top