Из языка программирования C 2nd Edition:
Поскольку аргумент вызова функции является выражением, преобразования типов также имеют место, когда аргументы передаются функции. В отсутствие прототипа функции char и short становятся int, а float становится double.
Прочитав текст, создается впечатление, что если вы явно не укажете тип аргумента с использованием прототипа прототипа или функции, аргументы функции всегда будут передаваться как переданные как int или double.
Чтобы проверить мое предположение, я скомпилировал следующий код:
#include <stdio.h>
main()
{
unsigned char c = 'Z';
float number = 3.14f;
function_call(c, number);
}
void function_call(char c, float f)
{
}
После компиляции я получаю следующие предупреждения:
typeconversion.c: 11: предупреждение: конфликтующие типы для 'function_call
typeconversion.c: 7: warning: предыдущее неявное объявление 'function_call было здесь
Моя догадка - это с, а число было преобразовано в int и double в вызове функции, а затем было преобразовано обратно в char и float. Это то, что на самом деле произошло?