Are the types of these two declarations compatible types?
void f(char *, char *);
void f(char *restrict, char *restrict);
or similarly:
void g(char *);
void g(char *const);
I'm having a hard time finding anything in the standard which covers the issue. I'm mostly interested in the topic of whether it's valid to manually prototype a function, omitting the restrict keyword, where the actual type might have restrict-qualified arguments depending on the version of C or version of other libraries in use.
C11 section 6.7.6.3 §15:
They are compatible:
The names of the arguments in the prototype doesn't matter, so these definitions are equivalent. However it's a good practice, to put the names, as these should give some idea what the arguments are intended for. Technically they are not need though, but serve as a documentation.
It is a different matter with the
const
qualifier, because this changes the meaning of the function.