patterns - ¿Cuál es una buena referencia para documentar los patrones de uso de archivos ".h" en C?
design patterns singleton (3)
Esta pregunta ya tiene una respuesta aquí:
- ¿Debo usar #include en los encabezados? 9 respuestas
"C Interfaces e implementaciones" muestra algunos patrones de uso interesantes para las estructuras de datos, pero estoy seguro de que hay otros por ahí.
Es posible que desee echar un vistazo al diseño de software de C ++ a gran escala de John Lakos.
Mire el estándar de codificación C del Centro de Vuelo Espacial Goddard (NASA) (en esta URL ). Tiene algunas pautas buenas e interesantes.
Una directriz específica, que he adoptado para mi propio código, es que los encabezados deben ser autónomos. Es decir, deberías poder escribir:
#include "header.h"
y el código debe compilarse correctamente, con cualquier otro encabezado necesario incluido, independientemente de lo que haya sucedido antes. La forma más sencilla de garantizar esto es incluir el encabezado en la fuente de implementación, como primer encabezado. Si eso compila, el encabezado es autónomo. Si no compila, arregle las cosas para que así sea. Por supuesto, esto también requiere que se asegure de que los encabezados sean idempotentes, funcione igual independientemente de la frecuencia con la que estén incluidos. Hay una expresión estándar para eso, también:
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...operational body of header.h...
#endif /* HEADER_H_INCLUDED */
Es imperativo, por supuesto, tener el #define en la parte superior del archivo, no en la parte inferior. De lo contrario, si un encabezado incluido con esto también incluye header.h, terminará con un bucle infinito, no saludable. Incluso si decides ir con una estrategia de:
#ifndef HEADER_H_INCLUDED
#include "header.h"
#endif /* HEADER_H_INCLUDED */
en el código que incluye el encabezado, una práctica que no se recomienda, también es importante incluir las protecciones en el encabezado.
Actualización 2011-05-01
La URL de GSFC anterior ya no funciona. Puede encontrar más información en las respuestas a la pregunta ¿Debo usar #include en los encabezados , que también contiene una referencia cruzada a esta pregunta?
Actualización 2012-03-24
El estándar de codificación NASA C mencionado se puede acceder y descargar a través del archivo de Internet:
Makeheaders es un enfoque interesante: use una herramienta para generar los encabezados. Makeheaders se utiliza en cvstrac y fósil de DR Hipp.