2009-10-08 6 views

Antwort

14

Es ist eine benutzerdefinierte Funktion, die für ein Programm notwendig ist, auszuführen. Wenn Sie Ihr Programm in der kompilierten Sprache ausführen, wird die main-Funktion ausgeführt. Wenn Sie beispielsweise in Java eine Funktion der Signatur public static void main(String ... args) in einer Klasse haben, kann diese Klasse ausgeführt werden, da die JVM den Inhalt dieser main-Methode ausführt.

Beispiel in Java:

public class Test { 
    public static void main(String ... args) { 
    System.out.println("Hello World"); 
    } 
} 

...

javac Test.java 

...

java Test 

Ergebnisse in "Hallo Welt" auf der Konsole ausgegeben werden.

+4

Es ist nicht erforderlich, wenn Sie dem Linker mitteilen, eine andere Funktion als Einstiegspunkt zu verwenden. –

+3

@Ryan - einige von uns (* hust * Java * hust *) genießen nicht das süße Privileg, einen Linker zu haben. – ChssPly76

+4

@Ryan - Einige von uns (* hust * me * hust *) mögen nicht kämpfen mit einem Linker, wenn wir nicht müssen;) – aperkins

0

In C/C++, es ist ein Standard, so dass es eingebaut und rekonfiguriert.

Java, nicht sicher, keine Erfahrung

C# - Es ist ein Teil einer Klasse so sein von Ihnen festgelegt.

Alle diese sind von Ihnen definiert - Sie sagen ihm, was zu tun ist.

3

Es ist eine erforderliche benutzerdefinierte Funktion (der Einstiegspunkt für ausführbare Dateien) ...

3

Es ist nicht in jeder Sprache "eingebaut", in einem Sinne, dass es keine Standard-implementiert für Sie Main() verfügbar ist.

Bei C/C++/Java handelt es sich um eine Funktion mit einer speziellen Eigenschaft, nämlich der Funktion, die zu Beginn des Programms aufgerufen wird, nachdem alle statischen Einstellungen vorgenommen wurden. Z.B. gesamtes Ausführungspfad des C-Programms ist:

  1. Anruf main()

  2. Beenden einiger Initialisierungscode tun.

Als solches hat es eine Standard-Deklaration (Anzahl der Parameter von der Befehlszeile + Array von „Strings“ bestanden - aber die Sprache implementiert, dass - die die aktuellen Argumente von der Kommandozeile sind)

+0

Just FYI - "Main" ist ziemlich in VB.NET eingebaut. Sie müssen tatsächlich arbeiten, um es zu entlarven und Ihre eigene Implementierung an Ort und Stelle zu setzen ... –

+0

VB hat main()? (Ehrliche Überraschung - meine letzte Begegnung mit irgendeinem Basic überhaupt war in den Tagen von Sinclair Z80 PC-Besitz ... – DVK

0

Es ist eine benutzerdefinierte Funktion, die von der Laufzeitbibliothek der Sprache aufgerufen wird. Zum Beispiel wird eine C-Laufzeitbibliothek die Befehlszeilenargumente und manchmal Umgebungsvariablen vom Betriebssystem abgreifen und sie an Ihre main() -Funktion übergeben.

Verschiedene Sprachen Laufzeiten führen in der Regel die gleiche Operation in der einen oder anderen Form, und wird eine Art von Fehler werfen, wenn die Funktion, die es versucht, aufzurufen, nicht vorhanden ist.

5

Ich bin mir nicht sicher, was Sie mit integrierten vs. benutzerdefinierten definiert. Fast keine Sprache gibt Ihrer benutzerdefinierten Funktion das Privileg, der eigentliche Einstieg in das Programm zu sein. C++, beliebig.NET-Sprache und Java haben alle versteckte (eingebaute) Einstiegspunkt-Methoden, die wiederum Ihre benutzerdefinierte Main-Methode aufrufen (oder wie auch immer die Einstiegspunkt-Methode für diese Sprache aufgerufen wird - in .NET kann sie beliebig benannt werden, obwohl C# und VB.NET zwingt es, Main genannt zu werden.

Also ja, praktisch jede Sprache hat ein Konzept einer Methode, die automatisch aufgerufen wird, und diese Methode ist eine benutzerdefinierte Methode und in der Regel obligatorisch. Aber praktisch jede Sprache verfügt auch über eine integrierte Einstiegspunktmethode, die das Framework und/oder die Speicherverwaltung für den Prozess vor dem Aufrufen Ihrer benutzerdefinierten "Einstiegspunkt" -Funktion festlegt.

+2

Schöne Antwort. Ich würde nur hinzufügen, dass der Name "Haupt" nicht wirklich wichtig ist, wie die meisten anständigen Linker erlauben werden Sie geben Ihren Einstiegspunkt manuell an (zB/ENTRY für VS) – NewbiZ

0

Es ist Deklaration eingebaut. Die Definition wird vom Benutzer bereitgestellt oder in einigen Fällen von einem Anwendungsframework bereitgestellt, das über einen anderen Einstiegspunkt oder im Falle der meisten ereignisgesteuerten GUI-Frameworks über keinen einzigen benutzerdefinierten Einstiegspunkt verfügt.

4

Zitat aus dem C Standard (Schwerpunkt liegt ich):

5.1.2.1 Freistehende Umgebung

  1. In einer frei stehenden Umgebung (in die C Programmausführung stattfinden kann, ohne einen beliebigen Vorteil eines Betriebssystems), der Name und Art der Funktion beiaufgerufenProgrammstart sind Implementierung definiert. Alle Bibliothekseinrichtungen, die für ein freistehendes Programm verfügbar sind, mit Ausnahme des Minimalsatzes, der von Klausel 4, gefordert wird, sind implementierungsdefiniert.

main(), in einer freistehenden Umgebung, ist sehr viel eine benutzerdefinierte Funktion.

0

In Java main (String [] args) ist der Einstiegspunkt für Anwendungen nach Konvention (um C++ - Programmierer komfortabel zu machen). Bei Applets oder Servlets erfolgt der Aufruf von Code anders. Beachten Sie, dass eine JAR-Datei beliebige oder keine dieser Einstiegspunkte enthalten kann und dass jede Klasse eine Hauptdatei enthalten kann, damit ein gegebenes JAR auf verschiedene Arten als Anwendung aufgerufen werden kann, falls dies gewünscht wird.