Basicamente, en los archivos de cabecera se acostumbra definir macros simbólicas (con los #define), especificar tipos de datos definidos por el usuarios (typedef) y declarar funciones(esto serian prototipos, con o sin el especificador extern) varibles, uniones y estructuras. Todo esto contribuye a lograr un codigo mas limpio, portable y de facil lectura. Siguiendo las recomendaciones del manual de Kernighan y Ritchie, donde casi todos aprendimos C, nunca vamos a incluir codigo fuente en un archivo de cabecera. En este manual se recomienda por ejemplo usar defines para evitar la aparicion de numeros mágicos en el codigo fuente, que son numeros pasados como argumentos, que hacen que el programa funcione, pero que no se sabe qué representan.