Search code examples
clanguage-lawyerrestrict-qualifier

Compatible types and argument type qualifiers


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.


Solution

  • C11 section 6.7.6.3 §15:

    In the determination of type compatibility and of a composite type, each parameter declared with function or array type is taken as having the adjusted type and each parameter declared with qualified type is taken as having the unqualified version of its declared type.