Objektorientierung mit C
-
Hallo,
ich möchte einen einfachen Webserver mit C programmieren. Leider kenne ich mich mit C noch nicht so gut aus, habe aber Kentnisse in C++. Ich habe ein bisschen rumgetestet und festgestellt, dass jede *.c Datei eine main Funktion benötigt. Ich möchte aber eine Datei main.c in der sich nur die main befindet und in die andere Dateien included werden. Kann ich umgehen, das eine *.c Datei unbedingt eine main Funktion haben muss ?
-
Hans0001 schrieb:
Ich habe ein bisschen rumgetestet und festgestellt, dass jede *.c Datei eine main Funktion benötigt.
das stimmt doch gar nicht. es gibt nur eine 'main' funktion und die kann z.b. funktionen aufrufen, die in anderen dateien stehen.
extern void f(); // <--- diese funktion steckt in einem anderen file ... main() { f(); }
-
Hans0001 schrieb:
Ich habe ein bisschen rumgetestet und festgestellt, dass jede *.c Datei eine main Funktion benötigt.
Dann teste mal noch ein bissche weiter, das ist nämlich falsch
-
beim kompilieren der c-dateien ohne main krieg ich immer den fehler "undefined reference to 'main'".
muss das extern unbedingt davor stehen ?
-
Hans0001 schrieb:
beim kompilieren der c-dateien ohne main krieg ich immer den fehler "undefined reference to 'main'".
Du rufst den Compiler vermutlich so auf, dass der Linkvorgang mit eingeschlossen ist. Bei vielen Compilern erreicht man mit dem Schalter -c dass der Quellcode nur zu einem Objektfile übersetzt wird. Danach ist ein gesonderter Aufruf des Linkers nötig, um diese Files zusammenzulinken. Beim gcc sieht das so aus:
gcc -c foobar.c
gcc -c main.c
gcc -o meinprogramm foobar.o main.omuss das extern unbedingt davor stehen ?
Bei Funktionen nicht.
Das ist übrigens genauso wie in C++ und hat mit Objektorientierung nicht das geringste zu tun.
-
Hans0001 schrieb:
beim kompilieren der c-dateien ohne main krieg ich immer den fehler "undefined reference to 'main'".
den compiler sollte eine fehlende 'main' nicht stören, aber der linker möchte gerne wissen, wo der einsprungpunkt ist.
Hans0001 schrieb:
muss das extern unbedingt davor stehen ?
nee, geht auch ohne, oder du packt die funktions-prototypen in ein header-file und includierst dieses (wird am häufigsten so gemacht).
-
danke für eure hilfe, jetzt funzts.