Una funzione dichiarata per restituire Restituisce int nulla. È questo comportamento indefinito?

StackOverflow https://stackoverflow.com/questions/4090105

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:)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top