Forum: PC-Programmierung Wozu integer ans Betriebssystem übergeben? int void()


von Marcus Frank (Gast)


Lesenswert?

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

von Jupp (Gast)


Lesenswert?

Fehlercode

von OliverSo (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Marcus Frank (Gast)


Lesenswert?

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?

von Kai Markus T. (kmt)


Lesenswert?

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

von Wegstabenverbuchsler (Gast)


Lesenswert?

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.

von Klobrille (Gast)


Lesenswert?

> es handelt sich dabei um eine unsigned INT-Variable.

Leider nein, es handelt sich um ein 32 Bit (signed) integer.

von Chris (Gast)


Lesenswert?

> 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).

von Rolf Magnus (Gast)


Lesenswert?

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.

von dödel (Gast)


Lesenswert?

unter linux schon mal getestet wie groß der fehlercode wirklich sein 
darf/kann?

von dödel (Gast)


Lesenswert?

dürfte ernüchternd sein

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
Noch kein Account? Hier anmelden.