O que é uma boa referência documentando padrões de uso de arquivos ".h" em c? [duplicado
-
05-07-2019 - |
Pergunta
Esta pergunta já tem uma resposta aqui:
- Devo usar #include em cabeçalhos? 9 respostas
"C Interfaces and Implementations" mostra alguns padrões de uso interessantes para estruturas de dados, mas tenho certeza de que existem outras por aí.
Solução
Veja o padrão de codificação C Goddard Space Flight Center (NASA) (neste Url). Tem algumas diretrizes boas e interessantes.
Uma diretriz específica, que adotei para o meu próprio código, é que os cabeçalhos devem ser independentes. Isto é, você deve ser capaz de escrever:
#include "header.h"
E o código deve compilar corretamente, com outros cabeçalhos necessários incluídos, independentemente do que já foi anterior. A maneira simples de garantir isso é incluir o cabeçalho na fonte de implementação - como o primeiro cabeçalho. Se isso compilar, o cabeçalho é independente. Se não for compilar, conserte as coisas para que o faça. Obviamente, isso também exige que você garanta que os cabeçalhos sejam idempotentes - trabalhe da mesma forma, independentemente da frequência com que sejam incluídos. Há um idioma padrão para isso também:
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...operational body of header.h...
#endif /* HEADER_H_INCLUDED */
É imperativo, é claro, ter o #Define na parte superior do arquivo, não na parte inferior. Caso contrário, se um cabeçalho incluído por isso também inclui cabeçalho.h, você acaba com um loop infinito - não é saudável. Mesmo se você decidir ir com uma estratégia de:
#ifndef HEADER_H_INCLUDED
#include "header.h"
#endif /* HEADER_H_INCLUDED */
no código que inclui o cabeçalho - uma prática que é não Recomendado - é importante incluir os guardas no próprio cabeçalho.
Atualização 2011-05-01
O URL do GSFC acima não funciona mais. Você pode encontrar mais informações nas respostas para a pergunta Devo usar #include em cabeçalhos, que também contém uma referência cruzada a esta questão.
Atualização 2012-03-24
O padrão de codificação da NASA C referenciado pode ser acessado e baixado através do Internet Archive:
Outras dicas
MakeHeaders é uma abordagem interessante: use uma ferramenta para gerar os cabeçalhos. MakeHeaders é usado no Dr. Hipp's cvstrac e fóssil.
Você pode querer dar uma olhada no design de software C ++ em larga escala de John Lakos.