C: Inclusões dentro dos cabeçalhos
-
05-07-2019 - |
Pergunta
Se eu tiver o seguinte:
/*
* example.h
*/
#ifndef EXAMPLE
#define EXAMPLE
#include <stdio.h>
extern int parse_string(FILE *, char const*, const unsigned int);
#endif
Isso significa que o código que usa ... #include example.h
... não terá que ... #include example.h
S ... dependências? (ou seja: #include <stdio.h>
)
Solução
Correto - é por isso que sua boa prática limita os cabeçalhos necessários em outros cabeçalhos. O pré -processador substituirá a diretiva "#include" pelo conteúdo do stdio.h, para que seu cabeçalho pareça algo assim para o compilador:
/*
* example.h
*/
#ifndef EXAMPLE
#define EXAMPLE
<contents of stdio.h>
extern int parse_string(FILE *, char const*, const unsigned int);
#endif
Outras dicas
Sim
Mas se o código depende de <stdio>
, provavelmente deve incluí -lo. (Afinal, <stdio>
tem proteção de inclusão múltipla também.)
Se o que você deseja é um mestre incluir para o seu projeto, vá em frente e faça um, mas inclua os cabeçalhos reais e os cabeçalhos comuns do sistema, mas sem protótipos, declarações ou macros. Isto é, tenha o mega incluir nada além de incluir. Dessa forma, os módulos individuais podem tomar suas próprias decisões à medida que o programa evolui.
Sim, você pode fazer isso e terá o efeito desejado.
Para o seu exemplo específico que você precisa FILE
declarado emu003Cstdio.h> , então é bom incluí -lo.
Se o protótipo parse_string () usado size_t
ao invés de unsigned int
e const char *
(para um nome de arquivo) em vez de FILE *
, Eu incluiriau003Cstddef.h> no "exemplo.h"
#ifndef EXAMPLE
#define EXAMPLE
#include <stddef.h> /* size_t typedef */
extern int parse_string(const char *filename, char const*, const size_t);
#endif