2009-03-24 13 views
1

Die Funktion getche() beendet das Programm nicht ordnungsgemäß, daher möchte ich die Funktion exit (int status) versuchen. Wie funktioniert es in der Programmiersprache Turbo C++? Ich kann die Erklärung in verwandten Hilfemodulen nicht verstehen und ich suche nach einer besseren Erklärung ... z. Woraus besteht der Parameter der Funktion? Danke im Voraus!Über die Funktion exit() in C++

+0

Was meinen Sie mit "Die Funktion getche() beendet das Programm nicht ordnungsgemäß"? IIRC, getche() liest nur ein einzelnes Zeichen von stdin; Ich glaube nicht, dass es etwas mit dem Beenden des Programms zu tun hat. – rmeador

+0

Warum erwarten Sie, dass getche (welches Zeichen bekommt) das Programm beendet? Das macht keinen Sinn. –

Antwort

1

Der Parameter ist ein ganzzahliger Statuscode, der als Exit-Status des Prozesses an die aufrufende Shell zurückgegeben wird. Exit selbst sollte den Prozess beenden und alle geöffneten Ressourcen aufräumen, die Ihr Prozess verwendet.

3

Nicht 100% sicher, was Sie damit meinen. Der Parameter für die Exit-Funktion (der "int-Status") ist eine Zahl, die an die Shell zurückgegeben wird. Üblicherweise ist dies Null, wenn Ihr Programm erfolgreich war, und> 0, wenn das Programm aus irgendeinem Grund fehlgeschlagen ist. Die Funktion bereinigt verschiedene Dinge und beendet dann Ihr Programm.

1

Der Parameter für Exit() ist ein Int, der den Grund oder Status des ausgehenden Prozesses angibt.

Junge, das klang nicht gut. Lassen Sie es mich noch einmal versuchen: Es ist ein Wert, der entweder an den Startprozess zurückgegeben wird (der Prozess, der CreateProcess() oder ShellExecute() verwendet hat, um den Ausgang zu starten) oder, im Fall einer Konsolenanwendung, einen Wert für den Befehlsshell, auf die über ERRORLEVEL zugegriffen werden kann.

Es ist typisch, Status = 0 zu setzen, wenn Sie normal beenden, ein anderer Wert (der eine Bedeutung haben kann, wenn Sie den Prozess erhalten wollen), um Fehler oder Probleme anzuzeigen.

2

Gut. Funktionen wie getch.. erhalten normalerweise ein Zeichen von der Tastatur oder Standardeingabe. Sie werden manchmal am Ende der Programme wie dieses

int main() { 
    // do many stuff... 
    // ... 
    getch(); 
} 

The getch/getche verwendet (ich weiß nicht, was die e für in Turbo-c steht ++) werden dann dem Benutzer die Änderung geben verwendet, um zu sehen die Ausgabe des Programms, bevor das Terminalfenster geschlossen wird (normalerweise geschieht das in Windows). Beachten Sie, dass es eine portable Funktion namens getchar in C und C++ gibt, die auch diesen Job erledigt (wartet auf eine Eingabe zusätzlich, aber das wird hier keinen Schaden verursachen).

Aber es wird nicht verwendet, um das Programm zu beenden. Nachdem eine Taste gedrückt wurde, wird die Steuerung fortgesetzt und nach dem Beenden des Hauptprogramms ist das Programm vorhanden. C++ und neuere C-Versionen fügen eine return 0; implizit nach der letzten Anweisung der Hauptfunktion ein (0 steht für "succesful"). Das bedeutet, dass Ihre Hauptfunktion einen Wert von 0 zurück an das Betriebssystem zurückgibt. Sie können jedoch andere Werte zurückgeben, wenn Sie die Rückgabe explizit schreiben und dort einen anderen Wert angeben. Dieser Wert wird von exit erwartet. Es beendet Ihr Programm und gibt den angegebenen Wert an das Betriebssystem zurück.

int main() { 
    // some stuff... 
    exit(42); 
    // other stuff (note: never reached!) 
} 

Dieses Programm wird einen Wert von 42 an das Betriebssystem zurückgeben. Normalerweise gibt es nur return 42; da und es hat den gleichen Effekt (*).


(*) Na ja, nicht ganz: Wenn Sie lokale Variablen, die destructor die nicht aufgerufen, wenn Sie exit verwenden. Aber sie werden sauber zerstört und Destruktoren werden aufgerufen, wenn Sie return n; verwenden. Daher bevorzugen Sie return n; in main, wenn Sie können. Exit, der in anderen Funktionen aufgerufen wird als Ihr main, beendet auch Ihr Programm, daher kann es erforderlich sein, das stattdessen zu verwenden, da die Rückkehr dorthin nur von diesen spezifischen Funktionen zurückkehrt und das Programm überhaupt nicht beendet.

+0

99 mal von 100 der "Destruktor" ist über Freigeben von Speicher und Schließen von Dateigriffen; Dinge, die sowieso als Teil des Exits passieren. Wenn Sie wirklich alles zerstören müssen, registrieren Sie einen Atexit-Handler und bereinigen Sie die wenigen Dinge, die es wirklich brauchen. –

+0

Sie völlig recht ich denke, (i erwähnte es meistens so er, dass im Grunde nur weiß). aber wenn wir die Chance haben, warum nicht "richtig" von Anfang an :) –

0

Der Parameter ist ein ganzzahliger Statuscode, der als Exit-Status des Prozesses an die aufrufende Shell zurückgegeben wird. Exit selbst sollte den Prozess beenden und alle geöffneten Ressourcen aufräumen, die Ihr Prozess verwendet.

0

Mehr Infos auf „exit“ Funktion

„exit“ -Funktion wird der Prozess beendet normalerweise zum Beenden von Prozessen die regelmäßige Bereinigung durchführen.

Zuerst werden alle Funktionen, die bei Aufrufen von "atexit" registriert wurden, in umgekehrter Reihenfolge ihrer Registrierung ausgeführt. Dann werden alle Datenströme geschlossen und die temporären Dateien gelöscht, und schließlich wird das Steuerelement an die Host-Umgebung zurückgegeben.

Der als Argument zum Beenden angegebene Wert wird als Rückkehrcode oder Beendigungscode des Programms an das Betriebssystem (die Hostumgebung) zurückgegeben. Per Konvention bedeutet ein Return-Code von Null, dass das Programm erfolgreich abgeschlossen wurde.

Hoffe das löscht Ihre Zweifel.