A menudo, crearé un archivo de encabezado para 'main' incluso si no espero que otro código tenga que acceder a él, ya que frecuentemente (1) una compilación de depuración terminará requiriendo algo fuera del módulo principal para acceder a algo dentro de él, o (2) el módulo principal terminará teniendo que ser dividido debido a las limitaciones del compilador (sistema incorporado). El patrón de tener cada archivo .c incluye su propio archivo .h es lo suficientemente fuerte como para crear a menudo archivos .h casi vacíos incluso para archivos .c que definen cosas que no están referenciadas en el código (como las tablas de interrupción-salto) , etc.)
Las convenciones de nomenclatura se vuelven un poco más complicadas cuando un archivo incluye varios archivos generados por el programa o incluye archivos que deben compilarse más de una vez (p.uno de mis proyectos tiene dos motores, cuyo código es idéntico, excepto que usan diferentes puertos de E/S y diferentes variables; motor.c mi archivo contiene:
#define LOCK L0
#include "motor.i"
#undef LOCK
#define LOCK L1
#include "motor.i"
#under LOCK
Tenga en cuenta que en este compilador incrustado en particular, el operador -> es muy ineficiente, por lo que una afirmación como:
L0.speed++;
compilará a uno instrucciones, mientras que una declaración como:
L0->speed++;
se traduce en cinco instrucciones si 'velocidad' es el primer elemento de la estructura, o siete si ocupa cualquier otra posición. Por lo tanto, es mucho más eficiente en velocidad, y algo más eficiente en el uso del espacio, duplicar el código con direcciones de resolución constantes que tener una rutina que maneje ambos motores.
Si hay un archivo adicional asociado con un archivo .c y contiene código real, lo llamaré ".i". Sin embargo, no estoy seguro de qué hacer si hay más de uno.
Así que supongo que un corolario de esta respuesta es que el patrón de fachada a menudo conducirá a una relación .c to .h no uno a uno. – Tommy