The type of conversion performed on the arguments in a function call depends on the presence of a function prototype (forward declaration) with declared argument types for the called function.
If a function prototype is present and includes declared argument types, the compiler performs type checking (see Chapter 6, “Functions”).
If no function prototype is present, only the usual arithmetic conversions are performed on the arguments in the function call. These conversions are performed independently on each argument in the call. This means that a float value is converted to a double; a char or short value is converted to an int; and an unsigned char or unsigned short is converted to an unsigned int.
Microsoft Specific
If the special keywords __near, __far, and __hugeare used, implicit conversions may also be made on pointer values passed to functions. You can override these implicit conversions by providing function prototypes, which also allow the compiler to perform type checking.