O que significa “controle atinge o fim da function não-vazia”?

Eu tenho recebido erros estranhos no compilador neste algoritmo de busca binária. Eu recebo um aviso de que o control reaches end of non-void function . O que isto significa?

 int binary(int val, int sorted[], int low, int high) { int mid = (low+high)/2; if(high < low) return -1; if(val  sorted[mid]) return binary(val, sorted, mid+1, high); else if(val == sorted[mid]) return mid; } 

O compilador não pode dizer a partir desse código se a function chegará ao final e ainda retornará algo. Para deixar isso claro, substitua o último else if(...) por apenas else .

O compilador não é inteligente o suficiente para saber que < , > e == são um "conjunto completo". Você pode deixar saber que, removendo a condição "if (val == sorted [mid])" - é redundante. Mas diga " else return mid; " else return mid;

Sempre construa com pelo menos otimização mínima. Com -O0 , toda a análise que o compilador poderia usar para determinar que a execução não pode atingir o final da function foi desativada. É por isso que você está vendo o aviso. A única vez que você deve usar o -O0 é para debugging passo-a-passo, o que geralmente não é uma boa abordagem de debugging, mas é o que a maioria das pessoas que começaram com o MSVC aprendeu em …

Eu tive o mesmo problema. Meu código abaixo não funcionou, mas quando substituí o último “if” por “else”, funciona. O erro foi: pode chegar ao fim da function não-vazia.

 int shifted(char key_letter) { if(isupper(key_letter)) { return key_letter - 'A'; } if(islower(key_letter) //<----------- doesn't work, replace with else { return key_letter - 'a'; } } 

adicione ao seu código:

 "#include < stdlib.h>" return EXIT_SUCCESS; 

no final do main()