Aus The C Programming Language 2nd Edition:
Da ein Argument eines Funktionsaufrufs ein Ausdruck ist, finden auch Typumwandlungen statt, wenn Argumente an die Funktion übergeben werden. Wenn kein Funktionsprototyp vorhanden ist, werden char und short zu int und float zu double.
Wenn ich den Text lese, bekomme ich den Eindruck, dass Funktionsargumente immer entweder als int oder double übergeben werden, es sei denn, Sie geben den Argumenttyp explizit an, indem Sie entweder cast oder den Funktionsprototyp verwenden.
Um meine Vermutung zu überprüfen, habe ich den folgenden Code kompiliert:
#include <stdio.h>
main()
{
unsigned char c = 'Z';
float number = 3.14f;
function_call(c, number);
}
void function_call(char c, float f)
{
}
Nach der Kompilierung erhalte ich die folgenden Warnungen:
typeconversion.c:11: Warnung: Widersprüchliche Typen für 'function_call'
typeconversion.c:7: warning: vorherige implizite Deklaration von 'function_call' war hier
Meine Vermutung ist, dass c und number beim Funktionsaufruf in int und double konvertiert wurden und dann wieder in char und float umgewandelt wurden. Ist das tatsächlich passiert?