When a function is called, if a function declaration is
present and includes declared argument types, the compiler performs
type checking. The compiler compares the data types provided by the
calling function with the data types that the called function expects
and performs necessary type conversions. For example, when function
funct is
called, argument
f is converted to a
double,
and argument
c is converted to an
int:
char * funct (double d, int i);
int main(void){
float f;
char c;
funct(f, c) /* f is converted to a double, c is converted to an int */
return 0;
}
If no function declaration is visible when a function
is called, or when an expression appears as an argument in the variable
part of a prototype argument list, the compiler performs default argument
promotions or converts the value of the expression before passing
any arguments to the function. The automatic conversions consist of
the following:
- The integral and floating-point promotions are performed.
- Arrays or functions are converted to pointers.