Wieso meldet der GCC keinen Fehler bei fehlenden Rückgabewerten?



  • Der GCC ist ja angeblich so standardkonform. Aber warum gibt er keinen Fehler aus, wenn ich eine Funktion habe, die einen Rückgabewert besitzt, ich aber nichts zurückgebe? Das folgende Programm würde zum Beispiel kompilieren:

    int main ()
    {
    }
    
    int Funktion
    {
        //Kein return
    }
    

    Daß die main keinen expliziten Rückgabewert braucht, ist mir ja bekannt, aber bei allen anderen Funktionen, die nicht void sind, ist das doch nicht der Fall, oder?



  • Er meldet keinen Fehler, weil er das AFAIK lt. Standard in der Situation nicht darf. Er darf warnen. Vielleicht musst du dein Warnlevel höher setzen (-W -Wall).



  • Der Standard erlaubt, daß ich bei Funktionen mit Rückgabewerten den Rückgabewert weglassen darf?



  • Nein das nicht, aber das ist kein Fehler, den ein Compiler erkennen MUSS, sondern zur Laufzeit undefiniertes Verhalten. Ob er das dann schon zur Compilezeit als Fehler anstreichen DARF, weiß ich nicht, ich vermute nein. Es könnte ja sein, dass die Funktion nicht aufgerufen wird und das Programm völlig problemlos funktioniert.


Log in to reply