Valor de basura cuando se pasan valores flotantes a la función que acepta parámetros enteros

#include int main(){ int ret = 0; ret = func(1.0,2.0); printf("\n ret : %d \n",ret); return 0; } func(int a,int b){ float m = 5.0; float n = 6.0; int sum = m + n; printf("\n sum : %d \n",sum); return a+b; } 

Editado

sum: 11

ret: -877505847

¿Por qué el valor flotante pasado al entero arroja un valor de basura mientras que el valor flotante agregado y asignado a un entero dentro de la función da el valor correcto 11?

Debe proporcionar una statement para func antes de llamarla

 int func(int a,int b); int main() { } int func(int a,int b) { // implementation } 

Su código presumiblemente comstackdo con una advertencia algo así como warning: implicit declaration of function 'func' . Si hubieras arreglado esta advertencia, también habrías arreglado el error.

Sería una buena práctica que el comstackdor le advierta sobre la mayor cantidad posible de problemas. También es posible que desee protegerse contra la posibilidad de omitir advertencias tratándolas como errores. Puede hacer esto agregando -Wall -Werror a su comando de comstackción para gcc o /W4 /Wx para MSVC.

Tenga en cuenta que se devuelve el valor correcto si pasa int s en func . En una conjetura, esto puede deberse a que el código de llamada no sabe que necesita enviar los argumentos a int y, en su lugar, pasa float . func luego lee los registros / ubicaciones de la stack en que los floats no se copiaron o recibe las representaciones de bits de los argumentos de float y los trata como int . Cualquiera de estos dos resultará en que se reciban valores incorrectos de a , b . Puede comprobarlo usted mismo agregando una printf inside para anotar los valores de sus argumentos.