Organización de archivos C

Estoy acostumbrado a hacer toda mi codificación en un archivo C. Sin embargo, estoy trabajando en un proyecto lo suficientemente grande como para que sea poco práctico hacerlo. Los he estado #incluyendo juntos, pero me he encontrado con casos en los que estoy #incluyendo algunos archivos varias veces, etc. He oído hablar de archivos .h, pero no estoy seguro de cuál es su función (o por qué tener 2 archivos es mejor que 1).

¿Qué estrategias debo usar para organizar mi código? ¿Es posible separar las funciones "públicas" de las "privadas" para un archivo en particular?

Esta pregunta precipitó mi consulta. El archivo tea.h no hace referencia al archivo tea.c. ¿El compilador "sabe" que cada archivo .h tiene un archivo .c correspondiente?

Respuestas a la pregunta(8)

Su respuesta a la pregunta