No hay un orden a la hora de relacionar las funciones. Lo 'unica regla a seguir es que debe existir al menos una funci'on llamada main(), que es la que el toma el control de la CPU cuando el proceso creado por nuestro programa en C comienza a ser ejecutado al ser invocado desde un shell por ejemplo.
Los programas en C pueden ser muy grandes, con miles de l'ineas de c'odigo fuente. El compilador de C (y su preprocesador llamado cpp) permite la construcci'on de grandes programas usando la t'ecnica de la compilaci'on separada, que consiste en que un gran programa fuente, con decenas de funciones puede ser descompuesto en varios ficheros fuente, agrupando funciones afines (por ejemplo, funciones que manipulan el sistema de ficheros, funciones que realizan c'alculos matem'aticos, etc) en un mismo fichero fuente (fichero ASCII). De esta forma, la compilaci'on durante el desarrollo del software se hace menos pesada. Para entender el porqu'e de esto supongamos el siguiente ejemplo: estamos desarrollando una aplicaci'on gr'afica que tiene adem'as un gran volumen de c'alculos cient'ificos. Para ver si los c'alculos son correctos, despu'es de cada edici'on+compilaci'on, ejecutamos el programa y observamos los gr'aficos. Supongamos este proceso de prueba y error se repite 100 veces. Si las funciones gr'aficas y de c'omputo cient'ifico se almacenan en el mismo fichero fuente, compilaremos in'utilmente 100 veces las funciones gr'aficas, cuando s'olo las de c'alculos debieran haber sido compiladas porque son las que est'an siendo depuradas. Si previamente hubi'eramos separado ambas clases de funciones en dos ficheros distintos y el de funciones gr'aficas estuviera compilado todo el tiempo, ahorrar'iamos tiempo de compilaci'on. Esto en programas voluminosos (como van a ser los nuestros) es importante.
Bien, pues adem'as, en la compilaci'on separada se utilizan unos ficheros especiales llamados ficheros cabecera (con extensi'on .h) que almacenan c'odigo fuente en C (o C++), pero NO generan c'odigo ejecutable. En estos ficheros se declaran estructuras de datos, prototipos de funciones, macros, etc, pero NO se escribe código compilable. Los ficheros cabecera se usan para compartir las estructuras y macros declaradas en ellos, por todos los ficheros que las incluyen usando la directiva de preprocesamiento #include <fichero_cabecera.h>.