Because of historical reasons going back to the very first version of C, it passes whatever type the argument is. So it could be an int
or a double
or a char*
. Without a prototype, the compiler will pass whatever size the argument is and the function being called had better use the correct argument type to receive it.
For more details, look up K&R C.