De Lenguaje de Programación C. 2ª Edición:C: conversión de tipo cuando se pasa un argumento en una llamada a la función
Desde un argumento de una llamada de función es una expresión, conversiones de tipos también tienen lugar cuando los argumentos se pasan a función. En ausencia de un prototipo de función, char y short se convierten en int, y float se convierte en double.
Al leer el texto, me da la impresión de que, a menos que especifique explícitamente el tipo de argumento utilizando el molde o el prototipo de función, los argumentos de función siempre se pasarán como int o double.
Con el fin de verificar mi hipótesis, que compiló el siguiente código:
#include <stdio.h>
main()
{
unsigned char c = 'Z';
float number = 3.14f;
function_call(c, number);
}
void function_call(char c, float f)
{
}
Después de la compilación consigo las siguientes advertencias:
typeconversion.c: 11: advertencia: Conflicto en los tipos para ' function_call '
typeconversion.c: 7: advertencia: la declaración implícita anterior de' function_call 'estaba aquí
Supongo que c y el número se convirtieron en int y en doble en la llamada a la función, y luego se convirtieron nuevamente en char y float. ¿Es esto lo que realmente sucedió?
Esta es una buena pregunta - y también ilustra por qué es importante siempre ** ** tiene un prototipo en su alcance, con todos los parámetros declarados. –