Ist das Weglassen von „Return“ in einer nicht-void-Funktion akzeptabel?
Wenn eine Funktion keinen Wert zurückgibt, aber einen nicht-void-Return hat Typ, es wird erwartet, dass ein Compiler einen Fehler ausgibt. In bestimmten Fällen können Compiler jedoch zulassen, dass solcher Code weitergegeben wird, ohne einen Fehler auszulösen.
Beispiel
Betrachten Sie den folgenden Code:
int func1() { return; // ERROR: no return value } int func2() { // Does not return anything }
Während func1 aufgrund der fehlenden return-Anweisung einen Fehler generiert, ist dies bei func2 nicht der Fall. Dies mag inkonsistent erscheinen.
Grundlegender Grund
In C hat das Zulassen von nicht zurückgebenden Funktionen mit einem nicht void-Rückgabetyp ein undefiniertes Verhalten. Allerdings geben Compiler häufig Warnungen anstelle von Fehlern aus, um die Kompatibilität mit Legacy-Code aufrechtzuerhalten.
Der C-Standard vermeidet in dieser Situation bewusst die Anforderung eines Fehlers bei der Kompilierung, da es schwierig ist, festzustellen, ob eine Funktion tatsächlich ohne Rückgabewert beendet wird.
Betrachten Sie dieses Beispiel:
int func3() { // ... if (condition) { // Does not return } return 0; // Reached only if condition is false }
In diesem Szenario kann der Compiler nicht wissen, ob der Code am Ende der Funktion ausgeführt wird oder Exit durch eine Ausnahme. Wenn in allen Fällen ohne Rückgabewert ein Fehler erzwungen wurde, wurde das Programm möglicherweise abgelehnt, obwohl es gültig war.
Fazit
Zulassen von nicht-rückkehrenden Funktionen mit nicht- Leere Rückgabetypen sind eine potenzielle Quelle für undefiniertes Verhalten. Obwohl Compiler möglicherweise Warnungen ausgeben, entscheiden sie sich häufig für ein freizügiges Verhalten, um die Kompatibilität sicherzustellen. Es wird jedoch dringend empfohlen, immer eine entsprechende Return-Anweisung einzufügen, um die Klarheit des Codes zu gewährleisten und potenzielle Probleme zu vermeiden.
Das obige ist der detaillierte Inhalt vonKann eine C-Funktion eine „return'-Anweisung sicher weglassen, wenn sie nicht „void' ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!