Warum der Name main für die Funktion main ()

8

Warum wird der Funktionsname main () in vielen Sprachen wie C, C ++, Java beibehalten? Warum nicht irgendwelche anderen Namen für diese Funktion? Gibt es eine gemeinsame Struktur für all diese 3 main () (in C, C ++, Java)

    
Nethra 06.11.2009, 15:33
quelle

18 Antworten

31

Es gibt eine Menge dummer und nicht sehr respektvoller Antworten hier auf eine berechtigte Frage.

C kam nicht von nirgends . Sein unmittelbarer Vorfahre ist B, geschrieben von Ken Thompson. Hier ist ein Link zum B-Handbuch . Die grundlegende Struktur eines B-Programms ist

main (); exit ();

main () wird vom Programmierer bereitgestellt und exit () wird von der Bibliothek bereitgestellt. Dies scheint der erste Auftritt von main () zu sein, da der Vorgänger von B, BCPL, kein solches Konzept hat. Ich nehme an, du müsstest Ken Thompson fragen, warum es hauptsächlich und nicht etwas anderes ist.

    
Tim Allman 06.11.2009 16:23
quelle
25

Beachten Sie auch, dass der Name main zwar eine Art Konvention ist, Sie aber Ihre Eintragsfunktion beliebig benennen können, solange Sie dem Linker mitteilen, was der Einstiegspunkt eigentlich ist. Sehen Sie dieses Snippet von man ld :

%Vor%

Auch FWIW, ld s erste Wahl des Einstiegspunktes ist (manchmal) tatsächlich eine Funktion genannt _start (aber ich denke, es ist wirklich ein plattformabhängiger Wert).

Und seht diesen Mailing-Post , der ld etwas mehr erklärt. % -e -Option:

  

-e gibt einen Ersatz für _start , nicht main() . Du musst wissen   wie die Systemlaufzeit Argumente an ein Programm übergibt und dupliziert   einige der Funktionen von crt [01in] .o und crt {begin, end} .o zu callen   main.

Ich kann nicht finden, wo es in der GCC-Manpage dokumentiert ist, aber Sie können auch -e an gcc übergeben, um den Einstiegspunkt anzugeben; Allerdings ist es eine ziemlich komplizierte Aufgabe, wenn Sie die Magie von C's main umgehen.

%Vor%     
Mark Rushakoff 06.11.2009 17:52
quelle
10

Weil C das getan hat, hat C ++ es beibehalten, um kompatibel zu sein, und Java hat es getan, um den Übergang von C ++ zu erleichtern. In den Anfängen von Java stellten Arbeitgeber oft Leute ein, die C ++ - Erfahrung hatten, weil es so ähnlich war. Nicht wie heute, wo der neue Typ mehr Java-Erfahrung haben soll als Gosling.

Und vergessen wir nicht, dass PL / 1 "procedure options main" für den gleichen Zweck verwendet hat. (Man, das sind einige Speicherzellen, die seit einer Weile nicht mehr berührt wurden!)

    
Paul Tomblin 06.11.2009 15:36
quelle
9

Wie würden Sie die Hauptfunktion eines Programms benennen?

    
rossoft 06.11.2009 15:36
quelle
8

Oder, um stumpfer zu sein, warum fahren wir auf der Seite der Straße, die wir tun?

Antwort: Wir mussten etwas auswählen.

    
Chris Cudmore 06.11.2009 16:21
quelle
6

Es ist nicht immer main ().

Java Applets verwenden init () und start () für den externen Aufrufer, um sich einzuloggen.

Servlets werden über die Methoden init () und service () gestartet.

(Der Dienst wird an die bekannteren doGet- und doPost-Methoden gesendet)

Zugegeben, diese Ausnahmen beruhen auf einem anderen Container als dem Betriebssystem, um die Methoden aufzurufen.

    
Chris Cudmore 06.11.2009 16:19
quelle
4

Weitere interessante Fragen wären ...

Sie sind so nah an einige Fragen gekommen, die fast interessant wären ...

  • ist main Teil der Sprache oder der Bibliothek?
  • Wie beginnt mein Programm?
  • läuft irgendetwas vor main() ?
  • Was war die erste Sprache, die main() verwendete?
  • kann ich ein Programm schreiben, das keine Bibliotheken verwendet? Braucht es ein main() ?
  • Was passiert, wenn ich von main () zurückkomme?
  • um Mädchen zu beeindrucken, wie könnte ich den Namen von main() in etwas Cooles ändern?
DigitalRoss 07.11.2009 12:36
quelle
3

Schnelle Antworten:

  1. Warum nicht?
  2. Warum es ändern? Um was?
  3. Weil es eines der Symptome ist, dass C, C ++ und Java alle eine gemeinsame Abstammung haben (genauer gesagt, dass C die anderen beiden stark beeinflusst hat). Sie werden main () beispielsweise nicht in Scheme oder Prolog sehen.

Ich persönlich denke, dass die Antwort auf die Fragen 2a und 2b am wichtigsten ist. Wenn Sie wirklich jedes C / C ++ / Java-Programm in der Welt brechen wollen, um zu reparieren, was Sie glauben, sind fehlerhafte Ästhetik eines einzelnen Funktionsnamens, würde ich Sie fragen müssen, wenn Sie Ihre Prioritäten in Ordnung haben ....; -)

    
Bob Cross 06.11.2009 15:38
quelle
3

Weil es Hauptfunktion ist. Der Begriff Hauptfunktion wurde mindestens seit den 1960er Jahren verwendet. In PL / I hatte die Funktion, die die Ausführung startete, den folgenden Header:

%Vor%

wobei FOO der Funktionsname ist.

    
Dan N 06.11.2009 17:14
quelle
2

Die Sprachdesigner mussten "einige" Namen und main () wie die Main-Funktion wählen, da hier die Ausführung beginnt:)

    
user59634 06.11.2009 15:36
quelle
2

Wahrscheinlich, weil es die Hauptfunktion ist, die ausgeführt werden muss. C ++ erbte den Namen von C und Java erbte es von C ++ (Programmierer mögen keine Änderung).

    
TLiebe 06.11.2009 15:36
quelle
2

Sie müssen es etwas nennen. Und ich kann mir keinen besseren Namen vorstellen, da hier der Hauptprogrammablauf beginnt.

Es gibt keine gemeinsame Struktur, außer vielleicht die Fähigkeit, Argumente zu nehmen. Es sollte auch keine gemeinsame Struktur geben, da der Sinn eines Programms darin liegt, das zu tun, was der Programmierer will. Ie., alles.

    
Tenner 06.11.2009 15:36
quelle
2

Nun, es muss entweder einen festen Namen haben, oder Sie müssen dem Programmierer eine Möglichkeit geben, den Namen anzugeben.

Wenn der Programmierer den Namen auswählen könnte, müsste es eine zusätzliche Anweisung oder ein Feature in der Sprache geben, nur um das zu handhaben. Und was wäre gewonnen? Es würde uns wohl schlechter gehen: Wenn Sie diese Funktion dann finden möchten, müssen Sie zuerst nach dem suchen, was das heißt, dann müssten Sie nach der Funktion selbst suchen, also wären es zwei Schritte statt eins.

Da es einen festen Namen haben wird, musste sich jemand aussuchen, wie dieser Name lauten würde. Man könnte an viele Kandidaten denken: "start", "run", was auch immer. Ich bezweifle, dass es einen zwingenden Grund gab, warum "main" gewählt wurde. Jemand musste etwas aussuchen, das war so gut wie alles andere.

    
Jay 06.11.2009 17:22
quelle
1

Manchmal ist es besser, etwas nicht zu ändern, nur um es zu ändern.

    
Chris Judge 06.11.2009 15:36
quelle
1

Leider kann ich (noch) nicht direkt kommentieren, also muss ich eine vollständige Antwort geben, ohne eine Antwort auf Ihre Frage zu kennen.

Aber ich möchte allen, die sagen, was anderes als main () sollte es trotzdem werden? darauf hinweisen, dass es in der Tat keine Notwendigkeit für eine benannte Funktion gibt überhaupt. Es hätte gut sein können {} mit der Konvention, dass Code innerhalb dieser anonymen Klammern die Hauptfunktion ist und das war es. (Es bedeutet also nicht nur int , wenn der Rückgabetyp fehlt, sondern auch main() , wenn der Funktionsname fehlt.)

    
Debilski 06.11.2009 18:06
quelle
0

Weil es so gut ist wie jedes andere. Der andere Weg besteht darin, einen unbenannten Block zu verwenden, wie in Pascal und seinen Ableitungen oder in den meisten Skriptsprachen, wo die "Hauptfunktion" (falls erlaubt, sie zu nennen) nur der Anfang der Datei ist. Dann müssen Sie sich darum kümmern, woher Sie die Programmargumente (eine Bibliothek oder eine globale Variable) erhalten, und Sie können fragen, warum sie args anstelle von arguments oder argv oder param usw. gewählt haben.

Mit freundlichen Grüßen, ich hätte nie gedacht, dass sich irgendjemand für diese fast irrelevante Konventionalität interessieren würde xD

    
fortran 06.11.2009 17:22
quelle
0

Wenn Sie ein eingebettetes System entwickeln, sehen Sie möglicherweise andere Namen.

ECos verwendet

%Vor%

(oder main (), je nach Einstellung).

Ein Linux-Kernelmodul verwendet eine Funktion, die mit __init markiert ist (obwohl das nicht dasselbe ist, da Module normalerweise ereignisgesteuert sind).

    
Tim Schaeffer 06.11.2009 18:00
quelle
-1

weil C, C ++ und Java einen Weg brauchten, um zu wissen, wo die Hauptfunktion ist ...

jedoch erlauben viele andere Sprachen, dass es so benannt wird, wie Sie möchten, und Sie können dem Compiler mitteilen, welche Funktion der Einstiegspunkt ist (Compileroption, Pragma, spezielle Anweisung ...).

    
Adrien Plisson 06.11.2009 15:52
quelle

Tags und Links