The variable names given in the prototype are optional and act merely as comments to the program reader since they are completely ignored by the compiler. You could replace the variable name wings in line 5 with your first name and there would be no difference in compilation. Of course, the next person that had to read your program would be somewhat baffled with your choice of variable names. Even though we wish to use the char type for eyes in the function, we wish to use it as a number rather than as a character. The next example program is similar but without the cast to int .
Compatible types are any simple types that can be converted from one to another in a meaningful way.
For example, if you used an integer as the actual parameter and the function was expecting a float type as the formal parameter, the system would do the conversion automatically, without mentioning it to you. This is also true of a float changing to a char, or a char changing to an int. There are definite conversion rules which would be followed. If we supplied a pointer to an integer as the actual parameter and expected an integer as the formal parameter in the function, the conversion would not be made because they are two entirely different kinds of values. Likewise, a structure would not be converted automatically to a long float, an array, or even to a different kind of structure, they are all incompatible and cannot be converted in any meaningful manner.