En cuanto al diseño de archivos, no hay demasiadas alternativas.
La partición es típicamente uno de los siguientes (paquete que aquí hay una sola biblioteca o binario):.
- .../proyecto /.../ paquete/módulo {c, h}
- .../project /.../ {src, include}/package/module. {C, h} // encabezados que no son de interfaz van a src
- .../project /.../ paquete/{src, incluir}/módulo. {c, h} // cabeceras no interfaz go para src
El particionamiento (1) es conveniente porque todos los archivos pertenecientes a un paquete particular se almacenan en un solo directorio, por lo que el paquete puede moverse fácilmente, pero con este enfoque separar los encabezados de API de los privados y detectar cambios de API no es trivial . (2) y (3) son muy similares, hacen que la liberación de API y la detección de cambios de API sean triviales, mientras que (2) es un poco más fácil para el caso cuando siempre liberas todo el proyecto y (3) es ligeramente mejor cuando lanzas individial paquetes (por ej.para los propósitos)
parcheo En cualquier C/C++ proyecto hay típicamente los siguientes paquetes comunes:
- macros comunes y tipos de datos
- paquete de registro
- aplicación del paquete de arranque (en caso de que haya más de 1 binarios en el proyecto).
"Nunca hagas nada que asigne memoria en un archivo de encabezado" --- Me gusta eso. Sucinto y una perla de sabiduría. – dmckee
solo para asegurarme de que me sale bien, la asignación de memoria en un archivo de cabecera es un problema porque si dos archivos .c lo incluyen, habrá ambigüedades del enlazador. ¿Estoy en lo correcto? – Lazer
Solo me preguntaba, ¿podría profundizar en esa regla de oro? Puedo entender si su asignación estática (por ejemplo, una variable sin un 'extern' delante), pero realmente no veo cómo es un problema, por ejemplo, con 'malloc'. – Edmund