Einstiegspunkt

Example of the main function, in C#.
Wie zum Main() könnte hineinschauen C# Quellcode. Verschiedene Teile werden als Referenz gekennzeichnet.

Im Computerprogrammierung, ein Einstiegspunkt ist der Ort in einem Programm, an dem die Ausführung eines Programms beginnt und an dem das Programm Zugriff hat Befehlszeile Argumente.[1]

Um die eines Programms zu starten Hinrichtung, das Lader oder Betriebssystem Übergibt die Kontrolle an seinen Einstiegspunkt. (Während BootenDas Betriebssystem selbst ist das Programm). Dies markiert den Übergang von Ladezeit (und dynamisch Linkzeit, falls vorhanden) zu Laufzeit.

Für einige Betriebssysteme und ProgrammiersprachenDer Einstiegspunkt ist in a Laufzeitbibliothek, eine Reihe von Unterstützungsfunktionen für die Sprache. Der Bibliothekscode initialisiert das Programm und übergibt dann die Kontrolle über das richtige Programm. In anderen Fällen kann das Programm die Laufzeitbibliothek selbst initialisieren.[2]

In einfachen Systemen beginnt die Ausführung bei der ersten Aussage, die häufig in interpretierte Sprachen, einfach ausführbar Formate und Bootlader. In anderen Fällen befindet sich der Einstiegspunkt bei einigen anderen bekannten Speicheradresse Welches kann ein sein Absolute Adresse oder relative Adresse (Offset).

Alternativ kann die Ausführung eines Programms an einem benannten Punkt beginnen, entweder mit einem herkömmlichen Namen, der durch die Programmiersprache oder das Betriebssystem oder bei einem Anrufer-Namen definiert ist. In vielen C-FamiliensprachenDies ist eine Funktion namens namens hauptsächlich; Infolgedessen wird der Einstiegspunkt oft als der bezeichnet Hauptfunktion.[3]

Im JVM -Sprachen wie zum Beispiel Java Der Einstiegspunkt ist eine statische Methode mit dem Namen hauptsächlich; in CLI -Sprachen wie C# Der Einstiegspunkt ist eine statische Methode mit dem Namen Hauptsächlich.[4]

Verwendungszweck

Einstiegspunkte gelten sowohl für den Quellcode als auch für auf ausführbar Dateien. Allerdings täglich Software-EntwicklungProgrammierer geben die Einstiegspunkte nur im Quellcode an, was sie viel besser bekannt macht. Einstiegspunkte in ausführbaren Dateien hängen von der ab Anwendung Binärschnittstelle (ABI) des tatsächlichen Betriebssystems und werden vom Compiler oder Linker (falls nicht vom ABI festgelegt) generiert. Andere verknüpft Objektdateien Kann auch Einstiegspunkte haben, die später vom Linker beim Generieren von Einstiegspunkten einer ausführbaren Datei verwendet werden.

Einstiegspunkte können Befehlsargumente, Variablen oder andere Informationen als lokale Variable weitergeben, die von der verwendet werden Hauptsächlich() Methode. Auf diese Weise können bestimmte Optionen bei der Ausführung des Programms festgelegt und dann vom Programm interpretiert werden. Viele Programme verwenden dies als alternative Möglichkeit, verschiedene Einstellungen zu konfigurieren oder eine festgelegte Vielfalt von Aktionen mithilfe eines einzelnen Programms auszuführen.

Zeitgenössisch

In den meisten der beliebten Programmiersprachen und Betriebssysteme von heute ist a Computer Programm Normalerweise hat nur eine einzige Einstiegspunkt.

Im C, C ++, D, Zick, Rost und Kotlin Programme dies ist a Funktion genannt hauptsächlich; in Java es ist ein Statische Methode genannt hauptsächlich (Obwohl die Klasse zur Aufrufzeit angegeben werden muss) und in C# Es ist eine statische Methode namens namens Hauptsächlich.[5][6]

In vielen wichtigen Betriebssystemen hat das ausführbare Standardformat einen einzigen Einstiegspunkt. In dem Ausführbares und verknüpfbares Format (ELF), verwendet in Unix und Unix-artig Systeme wie LinuxDer Einstiegspunkt ist in der angegeben e_entry Feld des ELF -Headers. In dem GNU Compiler -Sammlung (GCC), der vom Linker verwendete Einstiegspunkt ist der _Anfang Symbol. In ähnlicher Weise in der Tragbare ausführbare Datei Format, verwendet in Microsoft WindowsDer Einstiegspunkt wird durch die angegeben Adresofentrypoint Feld, das von geerbt wird von Sarg. Im Com DateienDer Einstiegspunkt befindet sich am festen Offset von 0100H.

Eine Ausnahme vom Ein-Ein-Ein---Punkt-Paradigma ist Android. Android -Anwendungen haben keinen einzigen Einstiegspunkt - es gibt kein Besonderes hauptsächlich Funktion. Stattdessen haben sie Wesentliche Bestandteile (Aktivitäten und Dienste), die das System nach Bedarf laden und ausführen kann.[7]

Eine gelegentlich verwendete Technik ist die fett binär, die aus mehreren ausführbaren Zielen für verschiedene Ziele besteht, die in einer einzelnen Datei verpackt sind. Am häufigsten wird dies durch einen einzelnen Gesamteintrittspunkt implementiert, der mit allen Zielen und Zweigen mit dem Zielspezifischen Einstiegspunkt kompatibel ist. Zu den alternativen Techniken gehören das Speichern separater ausführbarer Bereiche in separat Gabeln, jeder mit einem eigenen Einstiegspunkt, der dann vom Betriebssystem ausgewählt wird.

Historisch

Historisch und in einigen Zeitgenossen Legacy -Systeme, wie zum Beispiel VMs und OS/400, Computerprogramme haben eine Vielzahl von Einstiegspunktejeweils jeweils den verschiedenen Funktionen des Programms. Die übliche Möglichkeit, Einstiegspunkte zu bezeichnen, wie verwendet systemweit in VMs und in Pl/i und MAKRO Programme sollen sie am Ende des Namens des ausführbaren Bildes anhängen, das von a abgegrenzt wurde Dollarzeichen ($), z. Directory.exe $ make.

Das Apfel i Der Computer benutzte dies auch bis zu einem gewissen Grad. Zum Beispiel ein alternativer Einstiegspunkt in Apple I's BASIC Ich würde das Grundprogramm nützlich halten, wenn die Reset -Taste versehentlich gedrückt wurde.[Klarstellung erforderlich]

Ausgangspunkt

Im Allgemeinen können Programme jederzeit beenden, indem sie zum Betriebssystem zurückkehren oder Absturz. Programme in interpretierten Sprachen geben die Kontrolle in den Dolmetscher zurück, aber Programme in kompilierten Sprachen müssen zum Betriebssystem zurückkehren undefiniertes Verhalten.

Normalerweise gibt es in einem Programm keinen einzigen Ausstiegspunkt. In anderen Fällen stellen Runtimes jedoch sicher, dass Programme immer strukturiert über einen einzigen Ausstiegspunkt enden, was garantiert ist, sofern die Laufzeit selbst nicht abfällt. Dadurch kann der Reinigungscode ausgeführt werden, z. B. ATEXIT Handler. Dies kann erfolgen, indem entweder erforderlich ist, dass Programme durch Rückkehr aus der Hauptfunktion, durch Aufrufen einer bestimmten Ausstiegsfunktion oder durch die Laufzeit -Ausnahmen oder Betriebssystemsignale enden.

Programmiersprachen

In vielen Programmiersprachen die hauptsächlich Funktion ist, wo ein Programm seine Ausführung startet. Es ermöglicht eine hochrangige Organisation der Funktionalität des Programms und hat normalerweise Zugriff auf die Befehlsargumente dem Programm gegeben, wenn es ausgeführt wurde.

Die Hauptfunktion ist im Allgemeinen die erste Programmiererin, die geschrieben wurde Funktion Das wird ausgeführt, wenn ein Programm startet, und wird direkt aus der systemspezifischen Initialisierung in der Initialisierung aufgerufen Laufzeitumgebung (CRT0 oder gleichwertig). Einige Sprachen können jedoch vor Hauptläufen benutzerbeschriebene Funktionen ausführen, z. B. die Konstruktoren von C ++ Globale Objekte.

In anderen Sprachen, insbesondere viele interpretierte SprachenDie Ausführung beginnt bei der ersten Erklärung des Programms.

Eine nicht exexhustive Liste von Programmiersprachen folgt, die ihre Art zur Definition des Haupteintrittspunkts beschreibt:

Apl

Im AplWenn ein Arbeitsbereich geladen ist, wird der Inhalt der Variablen "Quad -LX" (latenter Expression) als APL -Ausdruck interpretiert und ausgeführt.

C und C ++

Im C und C ++, das Funktionsprototyp der Hauptfunktion sieht aus wie eine der folgenden:

int hauptsächlich(Leere); int hauptsächlich(); int hauptsächlich(int argc, verkohlen **argv); int hauptsächlich(int argc, verkohlen *argv[]); int hauptsächlich(int argc, verkohlen **argv, verkohlen **env); // genauer in C. // nicht gemäß dem ISO C -Standard 5.1.2.2.1 // In Abhängigkeit vom µC wird diese Form jedoch auch in eingebetteter Programmierung verwendet Leere hauptsächlich (Leere); 

Die Hauptfunktion sieht für Anwendungsprogrammierer (der Einstiegspunkt der Anwendung oder der Haupteintrittspunkt der Anwendung) wie ein Einstiegspunkt aus. Die Systemprogrammierung enthält weitere Informationen über das Programm und gibt den Einstiegspunkt an anderer Stelle (im Initialisierungsverfahren oder im Reset Interrupt -Vektor für eigenständige Programme) an.

Das Parameter argc, Argumentzahl, und argv, Argumentvektor,[8] Geben Sie jeweils die Anzahl und die Werte des Programms an Kommandozeilenargumente. Die Namen von argc und argv kann eine gültige Kennung in C sein, aber es ist eine übliche Konvention, diese Namen zu verwenden. In C ++ sind die Namen wörtlich zu nehmen, und die "Leere" in der Parameterliste ist weggelassen, wenn eine strenge Konformität gewünscht wird.[9] Andere plattformabhängige Formate sind auch nach den C- und C ++-Standards zulässig, außer dass in C ++ immer der Rückgabetyp sein muss int;[10] zum Beispiel, Unix (wenn auch nicht Pox.1) und Fenster haben ein drittes Argument, das dem Programm angibt Umgebung, ansonsten zugänglich über durch Getenv in stdlib.h:

int hauptsächlich(int argc, verkohlen **argv, verkohlen **Envp); 

Darwin-basierte Betriebssysteme wie z. Mac OS, haben einen vierten Parameter, der willkürliche os-unterstützte Informationen enthält, z. B. den Pfad zum ausführenden Binär:[11]

int hauptsächlich(int argc, verkohlen **argv, verkohlen **Envp, verkohlen **Apfel); 

Der von der Hauptfunktion zurückgegebene Wert wird zur Status beenden des Prozesses, obwohl der C -Standard nur zwei Werten eine spezifische Bedeutung zuschreibt: Exit_success (traditionell 0) und Exit_failure. Die Bedeutung anderer möglicher Rückgabeträger ist implementierungsdefiniert. Falls ein Rückgabewert vom Programmierer nicht definiert wird, implizit Rückkehr 0; am Ende von hauptsächlich() Die Funktion wird vom Compiler eingefügt; Dieses Verhalten ist vom C ++ - Standard erforderlich.

Es ist garantiert, dass argc ist nicht negativ und das argv [argc] ist ein Null Zeiger. Durch Konvent argc und argv Geben Sie den Namen des Programms als erstes Element an, wenn argc ist größer als 0; Wenn ein Benutzer einen Befehl von "eingibt"RM -Datei", das Hülse Wird das initialisieren rm Prozess mit argc = 2 und argv = {"rm", "file", null}. Wie argv [0] ist der Name, unter dem Prozesse erscheinen in ps, oben usw., einige Programme, wie z. Daemons oder diejenigen, die innerhalb eines laufen Dolmetscher oder virtuelle Maschine (wo argv [0] wäre der Name des ausführbaren Hosts), kann sich dafür entscheiden, ihren Argv zu ändern, um eine beschreibendere zu geben argv [0], normalerweise durch die Geschäftsführer Systemanruf.

Das hauptsächlich() Funktion ist etwas Besonderes; Normalerweise muss jedes C- und C ++ - Programm genau einmal definieren.

Wenn deklariert, hauptsächlich() muss deklariert werden, als hätte es eine externe Verknüpfung; Es kann nicht deklariert werden statisch oder in der Reihe.

In C ++, hauptsächlich() muss im globalen sein Namespace (d.h. ::hauptsächlich), kann nicht überladen werden und kann nicht ein sein MitgliedsfunktionObwohl der Name nicht ansonsten reserviert ist und für Mitgliederfunktionen, Klassen, Aufzählungen oder Nichtmitgliedfunktionen in anderen Namespaces verwendet werden kann. In C ++ (im Gegensatz zu C) hauptsächlich() kann nicht aufgerufen werden rekursiv und kann seine Adresse nicht übernehmen lassen.

C#

Bei der Ausführung eines Programms in geschriebenes Programm C#, das CLR Suche nach einer statischen Methode, die mit dem gekennzeichnet ist .Einstiegspunkt IL -Richtlinie, die entweder keine Argumente oder ein einziges Argument vom Typ nimmt String [], und hat eine Rückgabetyp von Leere oder intund führt es aus.[12]

statisch Leere Hauptsächlich(); statisch Leere Hauptsächlich(Saite[] Args); statisch int Hauptsächlich(); statisch int Hauptsächlich(Saite[] Args); 

Befehlszeilenargumente werden in übergeben Args, ähnlich wie es in Java gemacht wird. Für Versionen von Hauptsächlich() Die Rückgabe einer Ganzzahl, ähnlich wie C und C ++, wird als Ausgangsstatus des Prozesses in die Umgebung übergeben.

Da C#7.1 vier weitere mögliche Unterschriften des Einstiegspunkts gibt, die eine asynchrone Ausführung in der ermöglichen Hauptsächlich() Methode.[13]

statisch Aufgabe Hauptsächlich() statisch Aufgabe<int> Hauptsächlich() statisch Aufgabe Hauptsächlich(Saite[]) statisch Aufgabe<int> Hauptsächlich(Saite[]) 

Das Aufgabe und Aufgabe Typen sind die asynchronen Äquivalente von Leere und int.

Sauber

Sauber ist eine funktionale Programmiersprache basierend auf dem Umschreiben von Grafiken. Der anfängliche Knoten wird benannt Anfang und ist vom Typ *Welt -> *Welt wenn es Änderungen die Welt oder ein fester Typ, wenn das Programm das Ergebnis danach erst druckt Reduzierung Anfang.

Anfang :: *Welt -> *Welt Anfang Welt = Startio ... 

Oder noch einfacher

Anfang :: Saite Anfang = "Hallo Welt!" 

Man teilt dem Compiler mit, mit welcher Option die ausführbare Datei generiert werden soll.

Common Lisp

ANSI Common Lisp definiert keine Hauptfunktion; Stattdessen wird der Code in einer Quelldatei von oben nach unten gelesen und bewertet. Der folgende Code wird jedoch emulieren, nacheifern eine Hauptfunktion.

(Defun Hallo-Main ()  (Format t "Hallo Welt! ~%")) (Hallo-Main) 

D

Im D, das Funktionsprototyp der Hauptfunktion sieht aus wie eine der folgenden:

Leere hauptsächlich(); Leere hauptsächlich(Saite[] Args); int hauptsächlich(); int hauptsächlich(Saite[] Args); 

Befehlszeilenargumente werden in übergeben Args, ähnlich wie es in C# oder Java gemacht wird. Für Versionen von hauptsächlich() Die Rückgabe einer Ganzzahl, ähnlich wie C und C ++, wird als Ausgangsstatus des Prozesses in die Umgebung übergeben.

Forran

Forran hat keine Hauptunterroutine oder -funktion. Stattdessen a PROGRAMM Anweisung als erste Zeile kann verwendet werden, um anzugeben, dass eine Programmeinheit ein Hauptprogramm ist, wie unten gezeigt. Das PROGRAMM Anweisung kann nicht für rekursive Anrufe verwendet werden.[14]

  PROGRAMM HALLO  DRUCKEN *, "Cint!"  Endprogramm HALLO 

Einige Versionen von Forran, wie z. B. die auf dem IBM System/360 und Nachfolge -Mainframes unterstützen Sie die Programmrechnung nicht. Viele Compiler anderer Software -Hersteller ermöglichen es, dass ein Fortran -Programm ohne Programmanweisung zusammengestellt wird. In diesen Fällen gilt ein Modul, das eine Nicht-Coment-Anweisung hat, bei der keine Unterroutine-, Funktions- oder Blockdatenanweisung auftritt, als Hauptprogramm.

MÜCKE

Verwendung MÜCKEDer Programmierer muss nicht eine Funktion namens schreiben hauptsächlich; Eine Quelldatei mit einem einzelnen Unterprogramm kann mit einer ausführbaren Datei kompiliert werden. Der Ordner erstellt jedoch ein Paket ada_main, die eine Hauptfunktion im C-Stil enthalten und exportieren.

gehen

Im gehen Programmiersprache, Programmausführung beginnt mit dem hauptsächlich Funktion des Paket Main

Paket hauptsächlich importieren "fmt" Func hauptsächlich() {  fmt.Println("Hallo Welt!") } 

Es gibt keine Möglichkeit, auf Argumente oder einen Rückgabecode außerhalb der Standardbibliothek in Go zugreifen zu können. Auf diese kann über zugegriffen werden über os.args und os.exit jeweils sind beide in der enthalten "OS" Paket.

Haskell

A Haskell Das Programm muss einen Namen enthalten hauptsächlich an einen Wert des Typs gebunden Io tfür irgendeine Art t;[15] das ist normalerweise Io (). Io ist ein monad, was organisiert Nebenwirkungen bezüglich rein funktionell Code.[16] Das hauptsächlich Der Wert stellt die vom Programm durchgeführten Nebenwirkungen dar. Das Ergebnis der Berechnung, die durch dargestellt wird hauptsächlich wird verworfen; deswegen hauptsächlich hat normalerweise Typ Io (), was angibt, dass der Typ des Ergebniss der Berechnung ist (), das Gerätetyp, was keine Informationen enthält.

hauptsächlich :: Io () hauptsächlich = putstrln "Hallo Welt!" 

Befehlszeilenargumente werden nicht gegeben hauptsächlich; Sie müssen mit einer anderen IO -Aktion abgerufen werden, wie z. System.Environment.getargs.

Java

Java Programme beginnen am wichtigsten auszuführen Methode einer Klasse,[17][18][19][20] das hat eine der folgenden Methodenüberschriften:

Öffentlichkeit statisch Leere hauptsächlich(Saite[] Args) Öffentlichkeit statisch Leere hauptsächlich(Saite... Args) Öffentlichkeit statisch Leere hauptsächlich(Saite Args[]) 

Befehlszeilenargumente werden in übergeben Args. Wie in C und C ++, der Name "hauptsächlich()"Ist etwas Besonderes. Die Hauptmethoden von Java geben einen Wert nicht direkt zurück, aber man kann durch die Verwendung der verwendet werden System.exit () Methode.

Im Gegensatz zu C ist der Name des Programms nicht in enthalten Args, weil es der Name der Klasse ist, die die Hauptmethode enthält, so ist es bereits bekannt. Im Gegensatz zu C muss auch nicht die Anzahl der Argumente einbezogen werden, da Arrays in Java ein Feld haben, das den Überblick über die Anzahl der Elemente verfolgt.

Die Hauptfunktion muss in eine Klasse aufgenommen werden. Dies liegt daran, dass in Java alles in einer Klasse enthalten sein muss. Zum Beispiel a Hallo Welt Programm in Java kann aussehen wie:

Öffentlichkeit Klasse Hallo Welt {  Öffentlichkeit statisch Leere hauptsächlich(Saite[] Args) {  System.aus.println("Hallo Welt!");  } } 

Um dieses Programm auszuführen, muss man anrufen Java HelloWorld im Verzeichnis, in dem das zusammengestellt wurde Klassendatei HelloWorld.class) existiert. Alternativ ausführbar KRUG Dateien verwenden a Manifestdatei Um den Einstiegspunkt auf eine Weise anzugeben, die von der Dateisystems von der Sicht des Benutzers unabhängig ist.

Im FmsLogo, die Verfahren, wenn sie geladen werden, werden nicht ausgeführt. Damit sie ausgeführt werden können, ist es erforderlich, diesen Code zu verwenden:

zu prokname ...; Startbefehle (wie Druck [Willkommen]) Ende
Machen Sie "Startup [Procname]

Die Variable Anlaufen wird für die Start -Liste von Aktionen verwendet, aber die Konvention ist, dass dies ein anderes Verfahren aufruft, das die Aktionen ausführt. Dieses Verfahren kann von jedem Namen sein.

Ocaml

Ocaml hat kein hauptsächlich Funktion. Programme werden von oben nach unten bewertet.

Befehlszeilenargumente sind in einem Array namens verfügbar Sys.argv und der Exit -Status ist standardmäßig 0.

Beispiel:

print_endline "Hallo Welt" 

Pascal

Im PascalDas Hauptverfahren ist das einzige Unbenannte Block im Programm. Da Pascal-Programme Verfahren und Funktionen in einer strengeren Bottom-up-Reihenfolge als C-, C ++-oder Java-Programme definieren, ist der Hauptverfahren normalerweise der letzte Block im Programm. Pascal hat keine besondere Bedeutung für den Namen "hauptsächlich"oder einen ähnlichen Namen.

Programm Hallo(Ausgabe); Start  Writeln('Hallo Welt!'); Ende. 

Befehlszeilenargumente werden in gezählt Paramcount und zugänglich als Saiten von Paramstr (n), mit n zwischen 0 und Paramcount.

Versionen von Pascal, die Einheiten oder Module unterstützen, können auch einen unbenannten Block enthalten, der zur Initialisierung des Moduls verwendet wird. Diese Blöcke werden ausgeführt, bevor der Hauptprogrammeintrittspunkt aufgerufen wird.

Perl

Im PerlEs gibt keine Hauptfunktion. Aussagen werden von oben nach unten ausgeführt, obwohl Aussagen in a START Block werden vor normalen Anweisungen ausgeführt.

Befehlszeilenargumente sind im Special Array verfügbar @Argv. Im Gegensatz zu C, @Argv enthält nicht den Namen des Programms, das heißt $ 0.

Php

PHP hat keine "Haupt" -Funktion. Ausgehend von der ersten Zeile eines PHP -Skripts wird jeder Code, der nicht von einem Funktionsheader eingekapselt ist, ausgeführt, sobald er gesehen wird.

Pike

Im Pike Die Syntax ähnelt der von C und C ++. Die Ausführung beginnt bei hauptsächlich. Das "argc"Variable hält die Anzahl von Argumente an das Programm übergeben. Das "argv"Variable hält den Wert, der den an das Programm übergebenen Argumenten zugeordnet ist.

Beispiel:

 int hauptsächlich(int argc, Array(Saite) argv) 

Python

Python Die Programme werden von oben nach unten bewertet, wie in Skriptsprachen üblich: Der Einstiegspunkt ist der Beginn des Quellcode. Da Definitionen vor der Verwendung vorausgehen müssen, werden Programme in der Regel mit Definitionen oben und dem Code, der unten ausgeführt wird (uneinheitlich), ähnlich dem Code für a strukturiert werden Ein-Pass-Compiler, wie in Pascal.

Alternativ kann ein Programm mit einem expliziten strukturiert werden hauptsächlich Funktion, die den Code enthält, der ausgeführt wird, wenn ein Programm direkt ausgeführt wird, aber auch durch Importieren des Programms als Modul und Aufruf der Funktion aufgerufen werden kann. Dies kann durch die folgende Idiom erfolgen, die auf der internen Variablen beruht __Name__ eingestellt sein auf __hauptsächlich__ Wenn ein Programm ausgeführt wird, jedoch nicht, wenn es als Modul importiert wird (in diesem Fall wird es stattdessen auf den Modulnamen eingestellt); Es gibt viele Varianten dieser Struktur:[21][22][23]

importieren sys def hauptsächlich(argv):  n = int(argv[1]))  drucken(n + 1) wenn __Name__ == '__hauptsächlich__':  sys.Ausfahrt(hauptsächlich(sys.argv)) 

In dieser Idiom den Anruf zum benannten Einstiegspunkt hauptsächlich ist explizit, und die Interaktion mit dem Betriebssystem (Empfangen der Argumente, Anrufe -Systeme) wird explizit durch Bibliotheksanrufe durchgeführt, die letztendlich von der Python -Laufzeit behandelt werden. Dieser Kontrast zu C, wo diese durchgeführt werden implizit bis zur Laufzeit, basierend auf der Konvention.

QB64

Das QB64 Die Sprache hat keine Hauptfunktion, den Code, der sich nicht innerhalb einer Funktion befindet, oder der Unterprogramm wird zuerst von oben nach unten ausgeführt:

drucken "Hallo Welt! A ="; a = GetInenger(1.8d): drucken a Funktion GetInenger(n wie doppelt)  GetInenger = int(n) Ende Funktion 

Befehlszeilenargumente (falls vorhanden) können mit der Befehlsfunktion $ gelesen werden:

schwach geteilt Befehlszeile wie Saite Befehlszeile = Befehl $ 'Mehrere von Platzierung getrennte Befehlszeilenargumente können mit dem Befehl $ (n) gelesen werden commandline1 = Befehl $(2) 

Rubin

Im RubinEs gibt keine eindeutige Hauptfunktion. Stattdessen, Code außerhalb von irgendeinem geschrieben Klasse .. Ende oder Modul .. Ende Umfang wird im Kontext eines Specials ausgeführt "hauptsächlich"Objekt. Auf dieses Objekt kann mithilfe von zugegriffen werden selbst:

IRB (Haupt): 001: 0> selbst => Main 

Es hat die folgenden Eigenschaften:

IRB (Haupt): 002: 0> selbst.Klasse => Objekt IRB (Haupt): 003: 0> selbst.Klasse.Vorfahren => [Objekt, Kernel, BasicObject] 

Methoden außerhalb von a definiert Klasse oder Modul Umfang werden als private Methoden der "definiert"hauptsächlich"Objekt. Seit der Klasse von"hauptsächlich" ist ObjektSolche Methoden werden zu privaten Methoden fast jedes Objekts:

IRB (Haupt): 004: 0> def Foo IRB (Haupt): 005: 1>   42 IRB (Haupt): 006: 1> Ende => nil IRB (Haupt): 007: 0> Foo => 42 IRB (Haupt): 008: 0> [].Foo Nomethoderror: Private Methode "Foo" forderte []: Array von (IRB): 8 von/usr/bin/irb: 12: in `<main> '' IRB (Haupt): 009: 0> FALSCH.Foo Nomethoderror: Private Methode "Foo" forderte False: Falseclass von (IRB): 9 von/usr/bin/irb: 12: in `<main> '' 

Die Anzahl und Werte von Befehlszeilenargumenten können mit dem bestimmt werden Argv Konstantes Array:

$ IRB /Dev /Tty Foo Bartty (Haupt): 001: 0> argv Argv => ["Foo", "Bar"] tty (Haupt): 002: 0> argv.size Argv.size => 2 

Das erste Element von Argv, Argv [0], enthält das erste Befehlszeilenargument, nicht den Namen des Programms, das ausgeführt wird, wie in C. Der Name des Programms ist mit Verwendung verfügbar $ 0 oder $ Programm_name.[24]

Ähnlich wie Python könnte man verwenden:

wenn __DATEI__ == $ Programm_name  # Hier "Haupt" -Coder hier einlegen Ende 

Nur einen Code auszuführen, wenn seine Datei in der angegeben wurde Rubin Aufruf.

Rost

In Rost ist der Einstiegspunkt eines Programms eine Funktion namens namens hauptsächlich. Normalerweise befindet sich diese Funktion in einer Datei namens main.rs oder lib.rs.

// in `main.rs` fn hauptsächlich() {   println!("Hallo Welt!"); } 

Zusätzlich kann die Hauptfunktion nach Rost 1.26.0 A zurückgeben a Ergebnis:[25]

fn hauptsächlich() -> Ergebnis<(),, std::io::Fehler> {   println!("Hallo Welt!");   OK(())  // Rückgabe eines Typs `result` of Value` ok` mit dem Inhalt `()`, d. H. Ein leeres Tupel. } 

Schnell

Beim Laufen in einem Xcode Spielplatz,[26] Schnell verhält sich wie eine Skriptsprache, die Aussagen von oben bis unten ausführt; Top-Level-Code ist erlaubt.

// HelloWorld.playground Lassen hallo = "hallo" Lassen Welt = "Welt" Lassen Hallo Welt = hallo + "" " + Welt drucken(Hallo Welt) // Hallo Welt 

Kakao- und Kakao -Berührung-basierte Anwendungen in Swift werden normalerweise mit dem initialisiert @NsapplicationMain und @UiApplicationMain Attribute jeweils. Diese Attribute sind in ihrem Zweck gleichbedeutend mit dem main.m Datei in Ziel c Projekte: Sie erklären implizit das hauptsächlich Funktion, die aufruft UIApplicationMain (_: _: _: _ :)[27] das schafft eine Instanz von UIAPPLICATION.[28] Der folgende Code ist die Standardmethode zur Initialisierung eines Cocoa-Touch-basierten Kakao-Touchs iOS App und deklarieren Sie den Anwendungsdelegierten.

// AppDelegate.swift importieren Uikit @UiApplicationMain Klasse AppDelegate: Uiresponder, UiApplicationDelegate {       var Fenster: UiWindow?       Func Anwendung(_ Anwendung: UIAPPLICATION, didfinishlaunchingwithoptions Startoptionen: [UIAPPLICATION.LaunchOptionsKey: Irgendein]?) -> Bool {  Rückkehr Stimmt  }      } 

Visual Basic

Im Visual BasicWenn ein Projekt keine Formulare enthält, kann das Startobjekt das sein Hauptsächlich() Verfahren. Das Befehl $ Die Funktion kann optional verwendet werden, um auf den Argumentanteil der Befehlszeile zuzugreifen, die zum Starten des Programms verwendet werden:

Sub Hauptsächlich()  Debuggen.Drucken "Hallo Welt!"  Msgbox "Argumente, wenn überhaupt:" & Befehl $ Ende Sub 

Xojo

Im XojoEs gibt zwei verschiedene Projekttypen mit jeweils einen anderen Haupteintrittspunkt. Desktop -Anwendungen (GUI) beginnen mit dem App.open Ereignis des Projekts Anwendung Objekt. Konsolenanwendungen beginnen mit dem App.run Ereignis des Projekts Konsolenanwendung Objekt. In beiden Fällen wird die Hauptfunktion automatisch generiert und kann nicht aus dem Projekt entfernt werden.

Siehe auch

  • CRT0, eine Reihe von Ausführungs -Startroutinen, die in ein C -Programm verknüpft sind
  • Laufzeitsystem

Verweise

  1. ^ "Was ist ein Einstiegspunkt? (Mit Bild)". Wisegeek. Abgerufen 2020-01-22.
  2. ^ Decker, Karsten M.; Rehmann, René M. (1994). Programmierumgebungen für massiv parallele verteilte Systeme: Arbeitskonferenz der IFIP WG 10.3, 25.-29. April 1994. Springer Science & Business Media. ISBN 978-3-7643-5090-1.
  3. ^ "Hauptmethode in C#". Geeksforgeeks. 2018-11-30. Abgerufen 2020-01-22.
  4. ^ Wagner, Bill (2017-08-01). "Main () / Einstiegspunkte (C# Programmierhandbuch) - Microsoft Developer Network". docs.microsoft.com. Abgerufen 2018-12-03.
  5. ^ "Die main () -Funktion". ibm.com. IBM. Abgerufen 2014-05-08.
  6. ^ "Main () und Befehlszeilenargumente (C# Programmierhandbuch)". Msdn.microsoft.com. Abgerufen 2014-05-08.
  7. ^ "Anwendungsgrundlagen". Android -Entwicklung. linuxtopia.org. Abgerufen 2014-02-19.
  8. ^ ARGV: Der Vektorbegriff im Namen dieser Variablen wird im traditionellen Sinne verwendet, um sich auf Zeichenfolgen zu beziehen.
  9. ^ Parametertypen und Namen von Haupt
  10. ^ Abschnitt 3.6.1.2, Standard C ++ 2011 Ausgabe.
  11. ^ "Das Char *Apple Argumentvektor ". Archiviert von das Original Am 2015-12-22. Abgerufen 2014-05-12.
  12. ^ "Konsolenanwendungen in .net oder einen neuen Hund alten Tricks unterrichten". Msdn.microsoft.com. 2003-06-12. Archiviert von das Original am 2008-02-04. Abgerufen 2013-08-19.
  13. ^ "Das offizielle Repo für das Design der C# Programmiersprache: Dotnet/CSHARPLANG". 2019-08-26.
  14. ^ Xl fortran für AIX. Sprach-Referenz. Dritte Ausgabe, 1994. IBM
  15. ^ "Der Haskell 98 -Bericht: Module". Haskell.org. Abgerufen 2013-08-19.
  16. ^ Einige Missverständnisse von Haskell: idiomatischer Code, Reinheit, Faulheit und IO - auf Haskells monadischem io>
  17. ^ "Die Java -Sprachumgebung". Orakel. Abgerufen 2020-03-14. In der HelloWorld -Klasse deklarieren wir eine einzelne Methode namens Main (), die wiederum einen einzelnen Methodenaufruf enthält, um die Zeichenfolge "Hallo Welt!" Anzuzeigen. auf der Standardausgabe. Die Aussage, die "Hello World!" Druckt, druckt tut dies durch Aufrufen der Println -Methode des Out -Objekts. Das Out -Objekt ist eine Klassenvariable in der Systemklasse, die Ausgabeoperationen in Dateien ausführt.
  18. ^ Schildt, Herbert (2019). Java: Ein Anfängerführer. New York: McGraw-Hill Education. p. 46. ISBN 978-1-260-44022-5. OCLC 1061561931. // Ein Java -Programm beginnt mit einem Anruf bei Main ().
  19. ^ "Hallo Welt! - kostenloses interaktives Java -Tutorial". Lerne Java. Abgerufen 2020-03-14. In Java muss jede Codezeile, die tatsächlich ausgeführt werden kann, in einer Klasse sein. "Public Class Main {}" erklärt eine Klasse namens Main, die öffentlich ist. Dies bedeutet, dass jede andere Klasse darauf zugreifen kann.
  20. ^ "Hallo Welt! - kostenloses interaktives Java -Tutorial". Lerne Java. Abgerufen 2020-03-14. "public static void main (String [] args) {}" ist der Einstiegspunkt unseres Java -Programms. Die Hauptmethode muss genau diese Signatur haben, um unser Programm ausführen zu können.
  21. ^ Guido van Rossum (15. Mai 2003). "Python main () Funktionen", Kommentare {{}}: Externer Link in |postscript= (Hilfe)CS1 Wartung: PostScript (Link)
  22. ^ Code wie eine Pythonista: idiomatische Python Archiviert 2014-05-27 bei der Wayback -Maschine- Auf Python -Skripte, die als Module verwendet werden
  23. ^ Ned Batchelder (6. Juni 2003). "Python main () Funktionen".
  24. ^ Programmieren Ruby: Der Leitfaden des pragmatischen Programmierers, Ruby und seine Welt - auf Ruby Argv
  25. ^ "Releases.md".Github Rost. Abgerufen 15. Februar 2019.
  26. ^ Nicht zu verwechseln mit Swift -Spielplätze, eine Apple-entwickelte iPad-App zum Erlernen der Swift-Programmiersprache.
  27. ^ "UIApplicationMain (_: _: _: _ :) - uikit". Apple Developer -Dokumentation. Abgerufen 2019-01-12.
  28. ^ "UIAPPLICATION - UIKIT". Apple Developer -Dokumentation. Abgerufen 2019-01-12.

Externe Links