2017-02-17 4 views
0

Es ist in Ordnung, main() anstelle von int main() in C zu verwenden, aber das ist ein outdated practice. Aber ich habe Leute gesehen, die main() anstelle von int main() in C++ benutzen. Wenn sie main() verwenden, meinen sie void main() wie in this question?Warum benutzen Leute `main()` anstelle von `int main()` in C++?

+2

AFAIK, es ist Nicht-Standard und wird Kompilierung verursachen Fehler, wenn Ihre Warnungen hoch genug sind. Ich würde mir vorstellen, dass Compiler dies aus Legacy-Gründen unterstützen, zum Beispiel die Tatsache, dass C++ mit ANSI C kompatibel ist, das zu der Zeit Legacy-C-Code unterstützen musste, der nicht das ursprüngliche "int" hatte C++ - Compiler. Aber das ist alles Spekulation von mir und ich könnte falsch liegen. – Qix

+1

Wenn es von C kommt, wäre der implizite Rückgabetyp "int", nicht "void", also wäre es korrekter als "void main". Immer noch hässlich; Implizite Rückgabetypen sind seit dem ersten ANSI C-Standard verpönt. – ShadowRanger

+0

Selbst in C akzeptieren moderne C-Compiler 'main()' - anstatt 'int main()' -, wenn sie rückwärtskompatibel arbeiten. GCC 5.x und höher geht standardmäßig in den C11-Modus über, in dem "plain" main() ''nicht akzeptabel ist, während GCC 4.x und früher standardmäßig im C90-Modus ist, in dem es OK ist. Es (einfache 'main()') war nicht in "Standard" (strikt) C++ seit Anfang der 90er Jahre OK. Einige Compiler erlauben dies (aus Gründen der Abwärtskompatibilität), aber es war nicht OK. Wer also im modernen Code einfach 'main()' schreibt, macht es falsch. Jeder, der im alten Code auf 'main()' stößt, sollte es aktualisieren. –

Antwort

0

Wenn eine aktuelle Version von GCC, die beide diese kompilieren genau die gleiche Ausgabe:

int main(int argc, char* argv[]) { ... } 

main(int argc, char* argv[]) { ...} 

ich daher zu dem Schluss würde, dass die int impliziert.

+0

Über welche 'aktuelle Version von GCC' redest du? Es ist sowieso kein 5.x oder 6.x Compiler. Oder vielleicht meinen Sie den 'g ++' Compiler von GCC (im Gegensatz zu 'gcc'). Mit 'g ++' und keine Optionen, kompiliert es ohne Beschwerde mit 'g ++' 6.3.0; Derselbe Code mit 'gcc' 6.3.0 kompiliert nicht ohne Warnungen. –

+0

Sorry, du hast Recht - g ++, speziell: 'g ++ (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0 20160609' – Scovetta

+0

Ich war ein wenig überrascht, dass es unter den Standardoptionen mit G ++ ohne Warnung kompiliert wurde ; Ich wusste, dass es nicht unter GCC wäre. Es braucht eine "-pedantische" oder "-Wand" oder etwas Ähnliches, um eine Warnung von "g ++" zu erzeugen - selbst "-std = C++ 11" oder "-std = C++ 14" ist nicht ausreichend. Ich denke, es ist immer noch erlaubt, weil es immer noch in der Praxis vorherrscht, und es ist teilweise in der Praxis vorherrschend, weil es immer noch unter Standardoptionen erlaubt ist.Obwohl das, was jemand kompiliert, ohne '-Wall' oder strengere Optionen, ist jemand raten. –

0

interessant. Ich habe deine Frage Peter verstanden. aber jetzt-a-Tage niemand verwendet main() -Deklaration ohne einen Prototyp. die Frage, die Sie gestellt haben, ist über alte c-Standard, aber wir sind in c-Standard 11. so erwarten Sie nicht die alte main() -Deklaration .in alten c-Standard, wenn die Funktion nichts zurückgibt dann früher eine Rückkehr einer Ganzzahl angenommen. hoffe das erklärt deine frage. wenn u mehr Zweifel haben, bitte den Link http://ee.hawaii.edu/~tep/EE160/Book/chapapx/node7.html Ich denke, es verwendet zurückzukehren so auf die gleiche Art und Weise C++ Standards unterstützt möglicherweise den alten Standard Besuche refere.

die häufigsten Erklärungen Sie jetzt finden ist
int main (int argc, char ** argv) oder int main() oder void main()

+0

check out http://stackoverflow.com/questions/204476/what-hould-main-return-in-c-and-c – venky513