Question

Si j'ai les éléments suivants:

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

#include <stdio.h>

extern int parse_string(FILE *, char const*, const unsigned int);

#endif


Cela signifie-t-il que le code qui utilise ... #include example.h ... n'aura pas à ... #include <stdio.h> ... dépendances? (ex: <=>)

Était-ce utile?

La solution

Correct - c’est pourquoi il est recommandé de limiter les en-têtes nécessaires inclus dans d’autres en-têtes. Le préprocesseur remplacera & "; #Include &"; directive avec le contenu de stdio.h, donc votre en-tête ressemblera à ceci pour le compilateur:

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

<contents of stdio.h>

extern int parse_string(FILE *, char const*, const unsigned int);

#endif

Autres conseils

Oui

Mais si le code dépend de <stdio>, il devrait probablement l'inclure. (Après tout, <=> dispose également d'une protection contre les inclusions multiples.)

Si ce que vous voulez, c'est un maître include pour votre projet, continuez et créez-en un, mais indiquez-en à la fois les en-têtes réels et les en-têtes système communs, mais pas de prototypes, de déclarations ou de macros. C'est-à-dire que le méga include ne fait rien mais inclut. De cette manière, chaque module peut prendre ses propres décisions au fil de l'évolution du programme.

Oui, vous pouvez le faire et cela produira l'effet souhaité.

Pour votre exemple particulier, vous avez besoin de FILE déclarer dans < stdio.h > ;, il est donc bon de l'inclure.

Si le prototype parse_string () utilisait size_t au lieu de unsigned int et const char * (pour un nom de fichier) au lieu de FILE *, j'inclurais < stddef.h > dans le & "exemple.h &";

#ifndef EXAMPLE
#define EXAMPLE
#include <stddef.h> /* size_t typedef */
extern int parse_string(const char *filename, char const*, const size_t);
#endif
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top