Una funzione dichiarata per restituire Restituisce int nulla. È questo comportamento indefinito?
-
28-09-2019 - |
Domanda
Questa è una funzione valida in C ++:
int f()
{
if(false)
{
return 42;
}
}
La seguente definizione provoca UB:
int x = f(); //return value used
La domanda: Fa la seguente dichiarazione espressione causa UB?
f();
Citazione dal standard sarebbe molto gradito. Grazie
Attenzione: Osservazioni circa stilistica sono irrilevanti:)
Soluzione
C ++ 03 §6.6.3 / 2:
scorre l'estremità di una funzione è equivalente ad un rendimento senza valore; questo si traduce in un comportamento indefinito in una funzione di valore di ritorno.
Quindi questo è un UB in una funzione stessa.
A proposito gcc ti dà un bel punta avvertimento a questo UB:
In function 'int f()':
Line 7: warning: control reaches end of non-void function
Altri suggerimenti
C ++ 03, §6.6.3 / 2: "scorre l'estremità di una funzione è equivalente ad un rendimento senza alcun valore; questo si traduce in un comportamento indefinito in una funzione valore-ritorno"
Si noti che lo stesso non vale per C.