O que é uma boa referência documentando padrões de uso de arquivos ".h" em c? [duplicado

StackOverflow https://stackoverflow.com/questions/256277

  •  05-07-2019
  •  | 
  •  

Pergunta

Esta pergunta já tem uma resposta aqui:

"C Interfaces and Implementations" mostra alguns padrões de uso interessantes para estruturas de dados, mas tenho certeza de que existem outras por aí.

http://www.amazon.com/interfaces-implementations-techniques-addison-wesley-professional/dp/0201498413

Foi útil?

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:

http://web.archive.org/web/20090412090730/http://software.gsfc.nasa.gov/assetsbytype.cfm?typeasset=standard

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top