Function argument conversions
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: - Integral and floating-point values are promoted.
- Arrays or functions are converted to pointers.
Non-static
class member functions are converted to pointers to members.