Hallo ! Mal ne einfache Frage für die Fachleute. Falls ich eine Hautptroutine mit int main() {}; anlege, bekommt mein Betriebssystem eine Integerwert zurück. Nur welchen Wert hat denn der Integer bzw. wovon ist dieser denn abhängig? Hin und wieder sieht man sowas ich mitten im Programm int main(void) { Anweisung... } Welcher Parameter, als "int" kommen denn zurück..? Danke für Eure Beiträge ! Mfg Marcus
Wie bei jeder Funktion kommt genau der Parameter zurück, den du per return zurückgibst. Gar kein return löst normalerweise eine Compilerwarnung aus. Oliver
Marcus Frank wrote:
> Welcher Parameter, als "int" kommen denn zurück..?
Den mußt Du selber zurückgeben.
Z.B. unter DOS kann man den dann mit der Variable ERRORLEVEL auswerten.
In der Regel ist ein Returnwert 0 = erfolgreich
Und Werte != 0 sind dann Fehlercodes.
Z.B. ist es ja unnütz zu linken, wenn schon der Compiler einen Fehler
festgestellt hat.
Peter
Ok..also es hakt noch etwas.. 0 bei Fehler 0 > alles Ok => Routine beendet, oder wie oder was?? Das verstehe ich nicht so ganz...! return kenne ich aber...gibt es noch ne andere Erklärung, wenn es nicht so viel Umstände macht?
Das ist so mehr oder weniger der Sinn der Sache. Das Programm gibt in der Regel den Wert 0 zurück, wenn es fehlerfrei abgearbeitet und beendet wurde. Damit das Programm den Wert 0 zurückgibt, muss das natürlich irgendwo im Programmtext stehen. Alle Werte ungleich 0, die zurückgegeben werden, deuten auf einen Fehler im Programmablauf hin. Wie diese Fehlernummern definiert sind, bleibt Dir aber selbst überlassen. Aber es ist halt ein guter Hinweis darauf, was im Programm schiefgelaufen ist. Also, kurz und gut: return(0) <=> Programm fehlerfrei beendet return(n) mit n != 0 <=> ein Fehler aufgetreten ist. n beinhaltet dabei die Fehlernummer, die Du selbst festlegen kannst. Greetz kmt
Ein "Programm" (z.B. unter Windwos eine *.exe Datei, oder unter Unix irgendeine ausführbare Datei) ist, wenn es "aufgerufen" wird, eine geschlossene und gekapselte Aktion. Diese Kapselung bedeutet, das das unterlagerte Betriebssystem einen eigenständigen Subprozess aufruft, und diesem Programm Speicher zur Ausführung zuweist etc. Das Programm selbst kann nun als Rückgabewert-Übergabeparameter einen eindeutigen "errorlevel" zurück geben. es handelt sich dabei um eine unsigned INT-Variable. Vereinbarungsgemäß bedeutet der Rückgabewert 0: "alles ist gut gegangen". ein wert ungleich 0 bedeutet iregendwas ist schief gegangen (das mit dem "level" ist meistens nicht so zu verstehen, daß größere Zahlen schlimemre Sachen vermuten lassen. Die jeweiligen Errorlevel-Returncodes können der Dokumentation der jeweiligen Programme entnommen werden. natürlich gibt es diese Errorlevel-Philosophie sowol als shell-Kommandoaufruf, als auch als Aufruf von Progammen mittels einer API. versuch mal folgendes auf deiner Windows-Kiste (der Name der Environment-Variable unter Unix heißt je nach verwendeten shell anders)
1 | H:\Dokumente und Einstellungen\Martin>dir |
2 | Datenträger in Laufwerk H: ist DATA |
3 | Volumeseriennummer: 342C-1DE4 |
4 | |
5 | Verzeichnis von H:\Dokumente und Einstellungen\Martin |
6 | |
7 | 04.03.2005 21:40 <DIR> . |
8 | 04.03.2005 21:40 <DIR> .. |
9 | 09.11.2005 22:56 100 LuResult.txt |
10 | 27.02.2005 23:04 <DIR> Startmenü |
11 | 14.08.2005 15:30 864 reglog.txt |
12 | 21.05.2006 11:15 69 default.pls |
13 | 04.03.2005 21:40 <DIR> Favoriten |
14 | 27.02.2005 23:04 <DIR> Desktop |
15 | 04.03.2005 21:40 <DIR> Eigene Dateien |
16 | 05.03.2005 22:19 <DIR> Application Data |
17 | 21.05.2006 13:48 120 .java.policy |
18 | 30.12.2006 23:14 9.039 jap.conf |
19 | 30.10.2006 23:40 <DIR> Contacts |
20 | 08.03.2005 21:53 <DIR> Phone Browser |
21 | 10.03.2005 22:44 <DIR> WINDOWS |
22 | 5 Datei(en) 10.192 Bytes |
23 | 10 Verzeichnis(se), 5.277.024.256 Bytes frei |
24 | |
25 | H:\Dokumente und Einstellungen\Martin>echo %errorlevel% |
26 | 0 |
27 | |
28 | H:\Dokumente und Einstellungen\Martin>dir /hutzelputzel |
29 | Ungültige Option - "hutzelputzel". |
30 | |
31 | H:\Dokumente und Einstellungen\Martin>echo %errorlevel% |
32 | 1 |
------ Interpretation: beim ersten Befehlsaufruf wurde "dir" ohne weitere Parameter aufgerufen. Der Aufruf deses Befehls war erfolgreich, der Rückgabewert ist 0 beim 2. Aufruf wurde dem dir-Befehl der unbekannte Parameter /hutzelputzel übergeben. es erfolgt zu Recht die textmeldung, daß dieses eine ungültige Option sei. Der errorvalue (errorlevel) gibt daher einen 1 zurück. In Batchprogrammen kann sowas ausgewertet werden, um den programmablauf des aufrufenden zu steuern.
> es handelt sich dabei um eine unsigned INT-Variable.
Leider nein, es handelt sich um ein 32 Bit (signed) integer.
> return(0) <=> Programm fehlerfrei beendet > return(n) mit n != 0 <=> ein Fehler aufgetreten ist. n beinhaltet > dabei die Fehlernummer, die Du selbst festlegen kannst. Wobei return weder in C noch C++ eine Funktion ist und man es deswegen üblicherweise ohne Klammern schreibt: return 0; In C muss main() tatsächlich immer ein return haben, in C++ darf es auch fehlen. Der Standard garantiert in diesem Fall, dass bei einem fehlenden return in main() implizit ein "return 0;" angenommen wird. Diese Ausnahme gilt aber nur für main(), und main() muss unabhängig davon zwingend einen Rückgabewert haben ("void main()" war und ist auf hosted environments niemals zulässig).
Außerdem gibt es nach C- und C++-Norm eigentlich nur drei gültige Werte, die man aus main zurückgeben darf, nämlich 0, EXIT_SUCCESS und EXIT_FAILURE, wobei 0 dieselbe Bedeutung hat wie EXIT_SUCCESS. Allerdings sehen es Umgebungen wie POSIX nicht so eng und kommen auch mit anderen Werten klar. Das wird dann verwendet, um verschiedene Fehler melden zu können. > 0 bei Fehler > 0 > alles Ok => Routine beendet, oder wie oder was?? 0 heißt, daß das Programm seine Aufgabe erfolgreich durchführen konnte. Der Compiler selbst z.B. gibt 0 zurück, wenn beim Compilieren kein Fehler kam, sonst einen Wert ungleich 0. make benutzt das dann, um abzubrechen, wenn ein Fehler aufgetreten ist.
unter linux schon mal getestet wie groß der fehlercode wirklich sein darf/kann?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.