C: digite conversão ao passar um argumento em uma chamada de função
Da segunda edição da linguagem de programação C:
Como um argumento de uma chamada de função é uma expressão, as conversões de tipo também ocorrem quando os argumentos são passados para a função. Na ausência de um protótipo de função, char e short tornam-se int e float torna-se duplo.
Ao ler o texto, fico com uma impressão de que, a menos que você especifique explicitamente o tipo de argumento usando o protótipo de conversão ou de função, os argumentos da função sempre serão passados como transmitidos como int ou double.
Para verificar minha suposição, eu compilei o seguinte 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)
{
}
Após a compilação, recebo os seguintes avisos:
typeconversion.c: 11: aviso: tipos conflitantes para "function_call"
typeconversion.c: 7: aviso: a declaração implícita anterior de "function_call" estava aqui
Meu palpite é que c e number foram convertidos para int e double na chamada de função, e foram convertidos de volta para char e float. Isso é o que realmente aconteceu?