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++?
Antwort
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.
Ü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. –
Sorry, du hast Recht - g ++, speziell: 'g ++ (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0 20160609' – Scovetta
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. –
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()
check out http://stackoverflow.com/questions/204476/what-hould-main-return-in-c-and-c – venky513
- 1. Warum kompiliert int main() {}?
- 2. Unterschied zwischen void main und int main?
- 3. main() Funktion in C
- 4. Ist int main (void) in C++ gültig?
- 5. C++ klasse warum brauchen main?
- 6. Unterschied zwischen main (void) und main() in C
- 7. C++: Zufallszahlengenerator außerhalb von main()
- 8. int main (int carg, const char ** varg) {
- 9. Rekursive main() - warum segfault?
- 10. C++ void Rückgabetyp von main()
- 11. Umgehen von "int main (int argc, char ** argv)" in SDL2
- 12. Package "main" und Func "main"
- 13. Warum verwendet C# implizite void Main?
- 14. Definition für main() in C
- 15. Warum sollte jemand C anstelle von C++ benutzen?
- 16. Warum nimmt main (int argc, char * argv []) zwei Argumente an?
- 17. F # main vs main() Syntax
- 18. Was bedeutet auto main() -> int?
- 19. Warum benutzen Leute etwas wie char * & buf?
- 20. JPA-Konfiguration - persistence.xml wird automatisch unter src/main/java anstelle von src/main/resource erstellt
- 21. Gibt es Probleme mit der Definition von main als int main (...) {}
- 22. main() in C, C++, Java, C#
- 23. Warum brauchen Applets kein main()?
- 24. Ist int main (int, char const * const *) gut gebildet?
- 25. Konst-Qualifikation der Main-Parameter in C++
- 26. Warum benutzen Leute _? als Bezeichner Suffix?
- 27. Fehler in C++ undefined reference to main
- 28. Warum ist der Aufruf `A (c);` in main() nicht eindeutig?
- 29. `undefinierter Verweis auf` main` in Cpp-Klasse ohne main()
- 30. Standardinitialisierung in der main() - Funktion
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
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
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. –