return void?



  • Hallo,

    Ich habe so eine Funktion gelesen:

    void mStopIfError( UINT8 iError )
    {
    if ( iError == ERR_SUCCESS ) return;
    _printf( "Error: %02X\n", (UINT16)iError );
    while ( 1 ) {
    blabla;
    }
    }

    soll es nicht return void heissen?

    Danke
    Blanc



  • es heisst nur "return;" und ist richtig so.

    nach dem return kommt ein wert oder nichts, kein datentyp.



  • Die Funktion ist vom Typ void, liefert also nichts zurück.
    Selbst wenn du was angeben würdest, wär das irrelevant, da der Compiler grundsätzlich 0 zurückliefert.



  • mein compiler (gcc) schmeisst fehler und verweigert die kompilierung, wenn ich versuche, den (nicht vorhandenen) rueckgabewert einer void funktion zu benutzen.

    wenn ich aus einer void funktion mit etwas anderem als return; (also z.b. return 0;) aussteigen will, gibts auch fehler und kompilierung wird abgebrochen.



  • blanc schrieb:

    Hallo,

    Ich habe so eine Funktion gelesen:

    void	mStopIfError( UINT8 iError )
    {
    	if ( iError == ERR_SUCCESS ) return;  
    	_printf( "Error: %02X\n", (UINT16)iError );  
    	while ( 1 ) {
    	blabla;
    	}
    }
    

    soll es nicht return void heissen?

    Danke
    Blanc

    void ist ein Datentyp.
    return arbeitet aber mit Werten, nicht mit Datentypen, oder hast du schon return int; oder return char*; gesehen?

    Eine void Funktion ist eine Funktion, die keinen Wert zurückliefert, deswegen reicht da ein return ;, um die Funktion zu verlassen.



  • c.rackwitz schrieb:

    mein compiler (gcc) schmeisst fehler und verweigert die kompilierung, wenn ich versuche, den (nicht vorhandenen) rueckgabewert einer void funktion zu benutzen.

    guter compiler.
    auch, wenn ich das verhalten höchst störend finde, wenn es um metaprogrammierung geht. sowas wie

    char f(void);
    int f(...);
    cout<<sizeof(f(bla()));
    

    um festzustellen, ob bla() void zurückgibt, geht da nicht. und ich hab's auch nicht irgendwie anders hingekriegt.

    [/quote]wenn ich aus einer void funktion mit etwas anderem als return; (also z.b. return 0;) aussteigen will, gibts auch fehler und kompilierung wird abgebrochen.[/quote]
    kannst eigenlich alles returnen, was selber zu void auwertet.
    insbesondere

    return throw 4711;
    


  • ein glueck, dass es cout<< und foo<bar> baz; nicht in ansi c gibt...



  • DocJunioR schrieb:

    Die Funktion ist vom Typ void, liefert also nichts zurück.
    Selbst wenn du was angeben würdest, wär das irrelevant, da der Compiler grundsätzlich 0 zurückliefert.

    Was meinst du damit, dass "grundsätzlich 0" zurückgeliefert wird?


Anmelden zum Antworten