Quando si definisce una funzione in C, ricevo un errore 'controllo può raggiungere la fine della funzione non vuota' nel compilatore quando si scrive la logica if/else in un certo modo (Scenario 1 sotto), ma non ricevo l'errore quando si scrive la logica in un altro modo (Scenario 2 di seguito). Per me, entrambi i modi di scrivere questa funzione sembrano simili, quindi sono in perdita sul motivo per cui la versione 1 non verrà compilata.C - Confuso da 'controllo può raggiungere la fine della funzione non vuota' quando si utilizza la sintassi se/else
Scenario 1
bool search(int value, int values[], int n)
{
int i;
if (n<1)
{
return false;
}
for(i=0;i<n;i++)
{
if (value==values[i])
{
return true;
}
else
{
return false;
}
}
}
Scenario 2
bool search(int value, int values[], int n)
{
int i;
if (n<1)
{
return false;
}
for(i=0;i<n;i++)
{
if (value==values[i])
{
return true;
}
}
return false;
}
Will not Scenario 2 restituire sempre false dopo il ciclo for? Oppure la funzione essenzialmente 'Stop' dopo aver restituito un valore per la prima volta, quindi restituendo 'true' una volta che il valore corrisponde ai valori [i]?
Nello scenario 1, tutte le istruzioni 'return' sono in blocchi condizionali. Così il compilatore vede questo e ti dà un avvertimento. – PaulMcKenzie
I due scenari stanno facendo cose diverse. Scenario 1 il compilatore non è abbastanza intelligente da sapere che il ciclo for non verrà effettivamente utilizzato come quando i = 0 l'uno o l'altro verrà utilizzato –
La funzione termina quando esegue un 'return', quindi il il secondo esempio non eseguirà il 'return false;' alla fine se colpisce prima un altro 'return's. – Dmitri