www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Besser int oder void bei Aufruf eines Unterprogramms?


Autor: Frank Polle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !
Was ist besser int oder void bei Aufruf des Unterprogramms "test" ?

int test();

void test();



Was ist Eure Meinung ?

Mfg Frank

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt test() etwas zurück? Nein? Dann void!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn in der Funktion test() etwas schiefgehen kann, wenn ihr übergebene 
Parameter auf Richtigkeit überprüft werden sollen, dann ist die 
Verwendung eines Rückgabewertes sinnvoll, mit dem die Funktion mitteilen 
kann, daß etwas nicht in Ordnung ist.

Hierbei gibt es zwei Philosophien:

die "boolsche":

  Die Funktion gibt im Fehlerfalle 0 zurück, wenn sie ordnungsgemäß
  funktioniert, gibt sie einen von 0 unterschiedlichen Wert zurück.

die des Fehlercodes:

  Die Funktion gibt 0 zurück, wenn sie ordnungsgemäß funktioniert.
  Fehlerbedingungen werden durch unterschiedliche Werte signalisiert.

Autor: Frank Polle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok...mehr Hintergrunde gibt es also nicht?!

Gruss Frank

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Polle wrote:
> Ok...mehr Hintergrunde gibt es also nicht?!
Was für Hintergründe soll es denn noch geben? Eine Funktion hat entweder 
einen Rückgabewert, der im Prinzip von jedem Datentyp sein kann (oder 
ein Zeiger auf einen Datentyp) oder sie hat keinen Rückgabewert und ist 
dementsprechend vom Typ void...

Wenn Deine Funktion "test" einen double zurückgibt, dann muss es auch
double test()
heißen. Wenn test einen Zeiger auf einen unsigned long zurückgibt, dann 
ist es
unsigned long* test()

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int,double usw. ist langsamer bzw. braucht mehr Befehle,
weil der Compiler irgendwie den Rückgabewert realisieren muss..
Bei void muss er dies nicht.

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> int,double usw. ist langsamer bzw. braucht mehr Befehle,
Jetzt wirds doch interessant
Popcorn-holen-geh
scnr Jörg

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
??

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Geschwindigkeit ist doch kein Kriterium , welchen Rückgabetyp man 
verwendet. Entweder man braucht einen, dann nimmt man den passenden, 
oder man braucht eigentlich keinen, dann ergibt sich die Frage, ob 
Fehlercodes verwendet wird.
Man könnte rein theoretisch ;) ganz auf Rückgabewerte verzichten und mit 
Globalen Variablen oder call-by-reference arbeiten, nur: schneller ist 
das sicher auch nicht.

?! Jörg

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, dat is klar, meine Reply war ja auch nur ein zusätzlicher Hinweis.

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  meine Reply war ja auch nur ein zusätzlicher Hinweis.
ok, sry
aber schade eigentlich ;-)

sry Jörg

Autor: Miu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber wenn mich jemand fragt:

"Besser int oder void bei Aufruf eines Unterprogramms?"

dann ist meine Antwort eben void aus oben genannten Gründen...

Wenn mir jemand die Wahl zwischen void und int gibt, dann bedeutet dies 
für mich, dass er keinen Rückgabewert benötigt... Stimme eurer Logik, 
dass eine Funktion, die nichts zurückliefert void sein sollte natürlich 
99% zu... :-)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Miu wrote:
> Wenn mir jemand die Wahl zwischen void und int gibt, dann bedeutet dies
> für mich, dass er keinen Rückgabewert benötigt...
Oder, dass er das Prinzip des Rückgabewertes absolut nicht verstanden 
hat...

> Stimme eurer Logik,
> dass eine Funktion, die nichts zurückliefert void sein sollte natürlich
> 99% zu... :-)
Wieso nur zu 99%?

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer etwas nimmt, sollte auch etwas zurück geben.

Wenn also eine Funktion irgendwelche Parameter annimmt, sollte sie so 
nett sein und auch wieder etwas zurück geben.

Das was eine Funktion zurück gibt, sollte natürlich umso größer sein, je 
mehr Parameter sie nimmt.

Generell gilt auch: Geben ist seeliger als Nehmen.

Funktionen, die also gar keine Parameter nehmen und dennoch etwas 
zurückgeben, sind für das Gemeinwohl des kompletten Programms sehr 
günstig und sollten daher bevorzugt behandelt werden.

Funktionen die sich aus globalen Variablen-Eigentum bedienen, sind 
Schmarotzer und sollten eliminiert werden.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenns die Seele ist, heißt es nur seliger.
Sozusagen der "looser" (sic!) unter den religiösen Ausdrücken.

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.