C Language Istruzione di ritorno mancante nella funzione di ritorno del valore

Esempio

int foo(void) {
  /* do stuff */
  /* no return here */
}

int main(void) {
  /* Trying to use the (not) returned value causes UB */
  int value = foo();
  return 0;
}

Quando una funzione viene dichiarata per restituire un valore, deve farlo su ogni possibile percorso di codice attraverso di essa. Il comportamento non definito si verifica non appena il chiamante (che si aspetta un valore di ritorno) tenta di utilizzare il valore restituito 1 .

Si noti che il comportamento non definito si verifica solo se il chiamante tenta di utilizzare / accedere al valore dalla funzione. Per esempio,

int foo(void) {
  /* do stuff */
  /* no return here */
}

int main(void) {
  /* The value (not) returned from foo() is unused. So, this program
   * doesn't cause *undefined behaviour*. */
  foo();
  return 0;
}
C99

La funzione main() è un'eccezione a questa regola in quanto è possibile che venga terminata senza un'istruzione return poiché in questo caso verrà automaticamente utilizzato un valore di ritorno ipotizzato pari a 0 2 .


1 ( ISO / IEC 9899: 201x , 6.9.1 / 12)

Se viene raggiunto il} che termina una funzione e il chiamante chiama il valore della chiamata della funzione, il comportamento non è definito.

2 ( ISO / IEC 9899: 201x, 5.1.2.2.3 / 1)

raggiungendo il} che termina la funzione principale restituisce un valore di 0.