In a function declaration, or prototype, the type of each parameter must be specified. In the function definition, the type of each parameter must also be specified. In the function definition, if the type of a parameter is not specified, it is assumed to be int.
A variable of a user-defined type may be declared in a parameter declaration, as in the following example, in which x is declared for the first time:
struct X { int i; };
void print(struct X x);
The user-defined type can also be defined within the parameter declaration. The user-defined type can not be defined within the parameter declaration.
void print(struct X { int i; } x); // legal in C
void print(struct X { int i; } x); // error in C++