die Main-Methode
-
Hey Leute,
habe eine Frage zur Main-Methode in C und zwar ist die Signatur der Methode:
int main(int argc, char *argv[])
Warum bricht der Compiler nicht ab, wenn ich main mit folgender Signatur benutze:
int main()
Gruß
-
Weil mehrere verschiedene Signaturen zulässig sind (Abhängig von der C Implementation).
int main(int, char**)
int main(void)
Folgendes ist in C89 falsch:
int main()
-
Es ginge ohne die beiden Parameter auch
int main(void)
. Warum dein Compiler sich nicht beschwert, wenn du main mit beliebigen Parametern definierst, können wir nicht wissen.Was ist eigentlich eine Methode?
-
void main() gibts auch noch. Solltest du aber gleich wieder vergessen.
-
FrEEzE2046 schrieb:
void main() gibts auch noch. Solltest du aber gleich wieder vergessen.
Ist im Standard nicht definiert!
-
Nein schrieb:
Ist im Standard nicht definiert!
Ist richtig, ich sagte auch nur, dass es das gibt.
-
FrEEzE2046 schrieb:
Nein schrieb:
Ist im Standard nicht definiert!
Ist richtig, ich sagte auch nur, dass es das gibt.
Tut es aber nicht. Das ist schlichtweg falsch.
-
MatheStein schrieb:
Hey Leute,
habe eine Frage zur Main-Methode in C und zwar ist die Signatur der Methode:
int main(int argc, char *argv[])
Warum bricht der Compiler nicht ab, wenn ich main mit folgender Signatur benutze:
int main()
Gruß
Da sag doch noch einer C könne keine Polymorphie
-
Janjan schrieb:
Tut es aber nicht. Das ist schlichtweg falsch.
Wenn ich sage, dass es "existiert", dann meine ich damit, dass es Compiler gibt die das so schlucken (z.B. VC). So lange es Compiler gibt die das tun, wird es auch Quellcode geben der void main() beinhaltet und somit kann man sowas schon mal zu Gesicht bekommen.
-
Und dann sollte man auch gleich wissen, dass der Code den man da liest Müll ist.
-
Hey Leute,
bei mir schluckt aber ein und derselbe Compiler (gcc) beide Signaturen und dieser ist doch ein reiner C-Compiler und unterstütz somit doch eigentlich keine polymorphen Funktionen oder?
Gruß
-
Entschuldigung.. Ich meinte nicht "polymorphen Funktionen" sondern "überladenen Funktionen"
Gruß
-
Wo hat man denn eine polymorphe / überladene Funktion?
Entweder mit Argumenten, oder Ohne. Beides geht nicht.
Der Compiler sorgt dafür, dass diese Funktion entsprechend mit oder ohne Argumenten aufgerufen wird bei Programmstart.
-
eine function ist doch auch nur eine adresse die gecallt wird also was du vorher auf den stack packst ist der function dann normalerweise gleich du solltest aber dafür sorgen das du das was da drauf kommt auch wieder runter kommt. wie du das machst ist gleich.
functionen lassen sich casten wie jede variable auch und daher lassen sich auch mehr oder weniger variablen auf den stack packen(stdcall)
lg lolo
-
MatheStein schrieb:
polymorphen Funktionen
gehen nur über umwege da die code section idr. schreib geschützt ist und muß daher in die text section aber dafür ist c bzw. die compiler normal nicht ausgelegt
-
noobLolo schrieb:
MatheStein schrieb:
polymorphen Funktionen
gehen nur über umwege da die code section idr. schreib geschützt ist und muß daher in die text section aber dafür ist c bzw. die compiler normal nicht ausgelegt
ups ich war gerade bei polymorphen code das ist bischen was anderes
-
Doch der gcc akzeptiert bei mir beide Signaturen unter Ubuntu. Kannst es selber testen
#include<stdio.h> int main(){ printf("Hallo Welt\n"); return 0; }
wird genau so akzeptiert wie
#include<stdio.h> int main(){ printf("Hallo Welt\n"); return 0; }
...........................
ok der main funktion kann es egal sein, ob vor ihrem Funktionsaufruf Daten auf den Stack gepackt werden, da ein Sprung aus main gleichbedeutend mit dem Programmende ist.
Hat mich trotzdem nur gewundert, dass ein und derselbe Compiler beide Signaturen
int main()
int main(int argc, char** argv)
akzeptiert was aber denke ich nur bei der main-Methode so ist, da nur diese vom Compiler fest vorgeschrieben ist oder?
Gruß
-
noobLolo schrieb:
eine function ist doch auch nur eine adresse die gecallt wird
Nein. Eine Funktion ist in C das abstrakte Konzept einer Abbildung von Eingabe- zu Rückgabewerten, durch die Angabe eines Algorithmus, der das Berechungsverfahren beschreibt. Wenn eine Funktion nur eine Adresse ist, wie erklärst du dann, was Inlining ist?
-
MatheStein schrieb:
#include<stdio.h> int main(){ printf("Hallo Welt\n"); return 0; }
wird genau so akzeptiert wie
#include<stdio.h> int main(){ printf("Hallo Welt\n"); return 0; }
Und es wundert dich, dass zwei auf das Zeichen übereinstimmende Schnippsel den gleichen Effekt haben?
-
MatheStein schrieb:
Doch der gcc akzeptiert bei mir beide Signaturen unter Ubuntu. Kannst es selber testen
Und jetzt schalte Warnungen und nutze --std=c89 (oder nur 1 -?).