¿Qué significa “control llega al final de la función no nula”?

He estado obteniendo errores de comstackdor extraños en este algoritmo de búsqueda binaria. Recibo una advertencia de que el control reaches end of non-void function . ¿Qué significa esto?

 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; } 

El comstackdor no puede decir a partir de ese código si la función alguna vez llegará al final y todavía devuelve algo. Para que quede claro, reemplace el último else if(...) con solo else .

El comstackdor no es lo suficientemente inteligente como para saber que < , > y == son un "conjunto completo". Puede informarle que eliminando la condición "if (val == sorted [mid])" - es redundante. Jut dice " else return mid; " else return mid;

Construya siempre con al menos una optimización mínima. Con -O0 , se ha -O0 todo el análisis que el comstackdor podría usar para determinar que la ejecución no puede alcanzar el final de la función. Es por eso que estás viendo la advertencia. La única vez que debes usar -O0 es para la depuración paso a paso, que de todos modos no es un buen método de depuración, pero es lo que aprendieron la mayoría de las personas que comenzaron con MSVC …

Yo tuve el mismo problema. Mi código a continuación no funcionó, pero cuando reemplacé el último “si” con “else”, funciona. El error fue: puede alcanzar el final de la función no nula.

 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'; } } 

agregue a su código:

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

al final de main()

Intereting Posts