Nein, du brauchst in einer C-Datei keine main-Funktion. Du kannst ein C-Modul auch ohne main() compilieren bis zum Objekt (*.o). Nur so ist es überhaupt möglich, Bibliotheken (*.a, *.so, *.dll) mit C-Funktionen zu erstellen. Diese Biblioheken enthalten nähmlich keinen C-Quellcode, sondern den Code in compilierter Form.
Eine main brauchst du erst dann, wenn du diese Module zu einem lauffähigen Programm zusammenfügst (linkst). Der Startup-Code, der die Umgebung für den Programmlauf schafft (globale Variablen initialisieren, Stack initialisieren, etc) hat an seinem Ende einen Sprung zu main(). Findet der Linker in den angegebenen Modulen keine main(), wird er das als unaufgelöste Referenz anmeckern.
Bei GCC kannst du auch mehrere C-Dateien compileren, assemblieren und linken mit
GCC a.c b.c ...
Dies beinhaltet dann neben dem eigentlichen Compilieren (Bei GCC wird darunter im engeren Sinne nur die Abbildung von C/C++/Java/ObjC/Fortran nach Assembler verstanden) auch das Assemblieren (ins Object-Format transformieren, was der Assembler erledigt) und das Linken/Lokatieren (Aufgabe des Linkers). Ohne weitere Angaben ruft GCC diese Programme stillschweigend auf.
Die Aufrufe kannst du mit GCC -v ... anzeigen lassen.
Lesezeichen