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.hS ... dependências? (ou seja: #include <stdio.h> )

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top