Programm funktioniert auch ohne return? Könnte es später Probleme geben?



  • Bedeutet, die Funktion gibt müll zurück.



  • roflo schrieb:

    Bedeutet, die Funktion gibt müll zurück.

    Aber die Ergebnisse stimmen ja.
    Hab auch

    int funktion(...
    

    durch

    void funkion(...
    

    ersetzt und es klappt trotzdem bestens. Wie meinst du das?



  • @Roflo Die Funktion gibt doch einfach gar nix zurück wo ist das Problem?



  • Der Rückgabewert ist dann interessant, wenn du ihn auch benutzt.

    i = funktion(A, B, C);
    //oder
    printf("%d", funktion(A, B, C));
    

    Du musst den Rückgabewert nicht nutzen (zuweisen), aber
    wenn deine Funktion erst gar keinen Rückgabewert hat, dann definiere die Funktion entsprechend (mit void ).



  • @TicToc: Das ist ja das Problem. Gehts aus einer Funktion mit Rückgabewert ohne Rückgabewert heraus, ist jener undefiniert. Weißt du diesen nicht zu bemerkst du das natürlich auch nicht.



  • @Roflo Naja wenn der undefiniert ist und ihn man wie DirkB nicht benutzt ist das hinfällig 😃 😃

    Ansonsten hat DirkB gerade alles Nötige gesagt... xD



  • Das Verhalten ist undefiniert.
    Egal ob der Rückgabewert ignoriert wird, oder nicht.

    Lass es!

    Jeder Compiler wird eine Warnung generieren. (Deiner nicht? Änder die Compilereinstellungen!).


  • Mod

    Furble Wurble schrieb:

    Das Verhalten ist undefiniert.

    Das hier. Das ist viel schlimmer als nur Müll als Rückgabewert. Daher betone ich es noch einmal, damit es nicht untergeht.

    edit: In C anscheinend wohl doch nicht, siehe nächster Beitrag. Mal wieder so ein Unterschied zwischen C und C++.



  • Furble Wurble schrieb:

    Das Verhalten ist undefiniert.

    Goddammit!
    Ich habe gerade festgestellt, dass ich von dem umgekehrten Fall ausgegangen bin ( void FUnktion gibt etwas zurück).

    Tatsächlich kannst Du in dem vorliegenden Fall wohl davonkommen, wenn Du den Rückgabewert ignorierst...(S. C11 - 6.9.1/12 Function definitions) Wohl irgendein Rückwärtskompatibilätskompromiss...)

    Meine Schlußbemerkung gilt trotzdem. 🙂

    (Links zu den einschlägigien Standards gibt's irgendwo bei den Stickythreads.)



  • Furble Wurble schrieb:

    Wohl irgendein Rückwärtskompatibilätskompromiss...)

    Ja, zu K&R.
    Die kannten noch kein void .
    Meist gab es einen Wert, den man zurückgeben konnte.
    Und wenn nicht, kann man ihn ja ignorieren.


Anmelden zum Antworten