www.mikrocontroller.net

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


Autor: Marcus Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlercode

Autor: OliverSo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Kai markus Tegtmeier (kmt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

H:\Dokumente und Einstellungen\Martin>dir
 Datenträger in Laufwerk H: ist DATA
 Volumeseriennummer: 342C-1DE4

 Verzeichnis von H:\Dokumente und Einstellungen\Martin

04.03.2005  21:40    <DIR>          .
04.03.2005  21:40    <DIR>          ..
09.11.2005  22:56               100 LuResult.txt
27.02.2005  23:04    <DIR>          Startmenü
14.08.2005  15:30               864 reglog.txt
21.05.2006  11:15                69 default.pls
04.03.2005  21:40    <DIR>          Favoriten
27.02.2005  23:04    <DIR>          Desktop
04.03.2005  21:40    <DIR>          Eigene Dateien
05.03.2005  22:19    <DIR>          Application Data
21.05.2006  13:48               120 .java.policy
30.12.2006  23:14             9.039 jap.conf
30.10.2006  23:40    <DIR>          Contacts
08.03.2005  21:53    <DIR>          Phone Browser
10.03.2005  22:44    <DIR>          WINDOWS
               5 Datei(en)         10.192 Bytes
              10 Verzeichnis(se),  5.277.024.256 Bytes frei

H:\Dokumente und Einstellungen\Martin>echo %errorlevel%
0

H:\Dokumente und Einstellungen\Martin>dir /hutzelputzel
Ungültige Option - "hutzelputzel".

H:\Dokumente und Einstellungen\Martin>echo %errorlevel%
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.

Autor: Klobrille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> es handelt sich dabei um eine unsigned INT-Variable.

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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: dödel (Gast)
Datum:

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

Autor: dödel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dürfte ernüchternd sein

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.