die Main-Methode
-
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 -?).
-
mngbd schrieb:
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?
Inlining ist eine optimierung des compilers und hat wenig mit einer function gemeinsam da sie dann nicht mehr existiert. am ende ist das ganze programm ein algorithmus der in form eines parsetree dargestellt werden kann. functionen sind wiederholt verwendete code blöcke zu denen gesprungen werden kann. damit sich das ding function nennen darf muß es eine adresse besitzen zu der du springen kannst. sonst ist es einfach inline code und keine function ein "#define add(a,b) (a+b)" wird ja auch nicht als function bezeichnet.
lg lolo
-
noobLolo schrieb:
in "#define add(a,b) (a+b)" wird ja auch nicht als function bezeichnet.
Stimmt. Das ist ein kaputtes Makro.
-
Janjan schrieb:
Stimmt. Das ist ein kaputtes Makro.
dann zeig mir das doch mal als intaktes makro baby
-
noobLolo schrieb:
Janjan schrieb:
Stimmt. Das ist ein kaputtes Makro.
dann zeig mir das doch mal als intaktes makro baby
Um dein Makro mal zu verbessern:
#define add(a,b) ((a)+(b))
-
Janjan schrieb:
noobLolo schrieb:
Janjan schrieb:
Stimmt. Das ist ein kaputtes Makro.
dann zeig mir das doch mal als intaktes makro baby
Um dein Makro mal zu verbessern:
#define add(a,b) ((a)+(b))
den sinn hab ich noch nie begriffen
#define add(a,b) (a+b) #define mul(a,b) (a*b) mul(5,add(3,4)) == 35;
#define add(a,b) ((a)+(b)) #define mul(a,b) ((a)*(b)) mul(5,add(3,4)) == 35;
#define mul(a,b) (a*b) mul(5,3+4) == 19;//wieso hat der depp das add(,) macro nicht verwendet...
evtl. weil ich keinen anderen an meinen source lass :p
-
ist nur 1 "-"
Gibt aber immer noch keine Fehlermeldung/Warnung oder sonst was.
Der nimmt beide Versionen problemlos hin.Habe es nun auch mal unter Windows getestet und wieder wurden beide Versionen akzeptiert.
Ist C vllt so spezifiziert, dass beide Versionen gelten?
Gruß