Domanda

Se ho il seguente:

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

#include <stdio.h>

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

#endif


Questo significa che il codice che utilizza ... #include example.h ... non dovrà ... #include <stdio.h> dipendenze di? (ad esempio: <=>)

È stato utile?

Soluzione

Corretto: ecco perché è buona norma limitare le intestazioni necessarie incluse in altre intestazioni. Il preprocessore sostituirà il & Quot; #include & Quot; direttiva con i contenuti di stdio.h, quindi la tua intestazione sarà simile al compilatore:

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

<contents of stdio.h>

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

#endif

Altri suggerimenti

Si

Ma se il codice dipende da <stdio>, probabilmente dovrebbe includerlo. (Dopotutto, <=> ha anche una protezione da inclusione multipla.)

Se quello che vuoi è un master includi per il tuo progetto, vai avanti e creane uno, ma includilo sia nelle intestazioni effettive che nelle intestazioni di sistema comuni, ma senza prototipi, dichiarazioni o macro. Cioè, avere il mega include non fa altro che include. In questo modo i singoli moduli possono prendere le proprie decisioni in linea con l'evoluzione del programma.

Sì, puoi farlo e avrà l'effetto desiderato.

Per il tuo esempio particolare devi FILE dichiarare in < stdio.h > ;, quindi è bene includerlo.

Se il prototipo parse_string () utilizzava size_t invece di unsigned int e const char * (per un nome file) anziché FILE *, includevo < stddef.h > nel " esempio.h "

#ifndef EXAMPLE
#define EXAMPLE
#include <stddef.h> /* size_t typedef */
extern int parse_string(const char *filename, char const*, const size_t);
#endif
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top