¿Cuál es el valor de retorno de una llamada de función si esa función realmente no proporciona uno?

1 minuto de lectura

¿Cual es el valor de retorno de una llamada de
Bill Randerson

Digamos que tenemos el siguiente código:

int func(char str[], int len) {
    // Don't return anything here.
}

int main() {
    char str[] = "Hello";
    int result = func(str, strlen(str));
    printf("%d\n", result);
}

Imprimirá un valor de cadena -1679929632 en mi computadora. Y cambia de vez en cuando cuando ejecuto.

¿Alguien puede explicar por qué sucede esto?

  • Es un comportamiento indefinido. Podría ser cualquier cosa o estrellarse.

    – Ninja retirado

    21 de enero de 2015 a las 5:10

  • ¿Se lee este valor de StackFrame? ¿De qué valor potencial es esto? ¿Alguna variable local o dirección de retorno?

    – Bill Randerson

    21 de enero de 2015 a las 5:11

  • Esto puede ayudarlo a comprender: stackoverflow.com/questions/12376461/… El valor es generalmente lo que sea que esté en el registro que se usa para devolver un valor de ese tipo.

    – Ninja retirado

    21 de enero de 2015 a las 5:14

  • Entonces, básicamente, la persona que llama simplemente intenta leer algún registro como valor de retorno, y la persona que llama no tiene ningún conocimiento de si la persona que llama realmente devuelve algo o no. ¿Derecha?

    – Bill Randerson

    21 de enero de 2015 a las 8:39

Si no aparece ninguna instrucción de retorno en la definición de una función, el control vuelve automáticamente a la función de llamada después de ejecutar la última declaración de la función llamada. En este caso, el valor de retorno de la función llamada es indefinido. Si no se requiere un valor de retorno, declare la función para que tenga un tipo de retorno nulo; de lo contrario, el tipo de retorno predeterminado es int.

Como se mencionó anteriormente, no está definido, por lo que encontrar la causa raíz detrás de algún valor aleatorio como retorno será inútil.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad