Qual a melhor prática em C?
Em um diretório específico, "e", do meu projeto, existem vários arquivos .h
. Em outros dois diretórios, "p" e "l", preciso incluir um conjunto desses arquivos .h
.
Atualmente, os arquivos dos diretórios "p" e "l" possui multiplos includes para o diretório "e":
./p/something.c ./l/something.c
#include <e/sample1.h>
#include <e/sample2.h>
#include <e/sample3.h>
Porém, eu não vejo isso acontecendo nas bibliotecas padrões. Então, pensei em criar um único arquivo .h
que exportaria tudo o que fosse necessário em outros diretórios:
./e/extern.h
#include <e/sample1.h>
#include <e/sample2.h>
#include <e/sample3.h>
E então, eu importaria apenas esse único header:
./p/something.c ./l/something.c
#include <e/extern.h>
Isso é uma coisa interessante a se fazer ou pode levar a bugs inesperados como dependências circulares? Lembrando que um arquivo .c
dentro do diretório "e" jamais iria incluir sse extern.h
Não há nada de errado (vide stdlib.h).
Porém evite a redefinição, aplicando a condição abaixo em cada um dos headers:
#ifndef _SAMPLE1_H_
#define _SAMPLE1_H_
#endif
Dependências circulares não estão relacionadas a sua questão. Ela só vai ocorrer se seu arquivo e/extern.h ou e/sample1.h incluir headers dos diretórios que previamente os incluem.
A primeira "melhor prática" seria dar nomes mais significativos para as coisas.
A segunda seria não buscar receitas de bolo assim, que as pessoas chamam de boas práticas e olhar o contexto, tentar achar uma solução de acordo com o que precisa.
Não temos o contexto, não sabemos nada do que tem dentro disso. A intenção é o que definirá qual é a melhor.
Sem contexto algum eu chutaria que o primeiro é mais adequado. Pelo menos até ter uma boa justificativa para fazer o segundo. Assim deixa mais explícito o que está "importando". Eu não estou conseguindo ver algum ganho em criar uma camada a mais.
A não ser que eu tenha entendido algo errado.
Espero ter ajudado.
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).