Konwersja typu C: podczas przekazywania argumentu wywołania funkcji

Z języka programowania C 2nd Edition:

Ponieważ argument wywołania funkcji jest wyrażeniem, konwersje typów mają również miejsce, gdy argumenty są przekazywane do funkcji. W przypadku braku prototypu funkcji char i short stają się int, a float staje się podwójny.

Czytając tekst, mam wrażenie, że jeśli nie określisz jawnie typu argumentu za pomocą prototypu rzutowania lub funkcji, argumenty funkcji będą zawsze przekazywane jako przekazane jako int lub double.

Aby zweryfikować moje założenie, skompilowałem następujący kod:

#include <stdio.h>

main()
{
     unsigned char c = 'Z';
     float number = 3.14f;
     function_call(c, number);
}

void function_call(char c, float f)
{
}

Po kompilacji otrzymuję następujące ostrzeżenia:

typeconversion.c: 11: ostrzeżenie: sprzeczne typy dla „function_call”

typeconversion.c: 7: warning: poprzednia niejawna deklaracja „function_call” była tutaj

Domyślam się, że c i liczba zostały przekonwertowane na int i double w wywołaniu funkcji, a następnie zostały przekształcone z powrotem na char i float. Czy tak właśnie się stało?

questionAnswers(4)

yourAnswerToTheQuestion