Programm funktioniert auch ohne return? Könnte es später Probleme geben?
-
int funktion (int x, int y, int z){ int i=0; for (i = x; ...){ .... } //Müsste hier nicht was mit return stehen? } int main(){ ... funktion(A, B, C); return 0; }
Ich dachte man muss irgendwas zurückgeben, aber die Funktion wurde auch so
ohne Probleme aufgerufen. Ist es wiedermal ein Fehler, der bei bestimmten
Werten problematisch sein kann oder kann ich es so lassen?
-
Wenn du keinen Wert an die Hauptfunktion zurückgeben willst, dann deklariere die Funktion am Besten so:
void Funktion(int x, int y, int z)
Solange du in der Hauptfunktion einer Variable keinen Funktionswert zuordnest wenn sie vom Typ void() ist
MeineZahl=Funktion(x, y, z)
gibt das keine Probleme. Wenn du keinen Rückgabewert in der Funktion definierst, definierst du keinen.
-
Bedeutet, die Funktion gibt müll zurück.
-
roflo schrieb:
Bedeutet, die Funktion gibt müll zurück.
Aber die Ergebnisse stimmen ja.
Hab auchint 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 (mitvoid
).
-
@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!).
-
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 keinvoid
.
Meist gab es einen Wert, den man zurückgeben konnte.
Und wenn nicht, kann man ihn ja ignorieren.