In C language it means absolutely nothing. In C the return value is an rvalue and C does not support cv-qualification of rvalues. Meaning that you can legally apply such qualification in the source code, but it will be ignored anyway.
While researching a different issue I came across another interesting fact about this matter.
In the original C89/90 standard as well as in C99 cv-qualifiers applied to the function return type were fully honored, i.e. even though they were "useless" they were still formally treated as part of function type. I.e. a function declared as
const int foo(const int);would have type `const int (const int)`. It was C11 (or C17?)
1 that finally updated the wording of "Function declarators (including prototypes)" section to "...then the type specified for ident is “derived-declarator-type-list function returning the
unqualified version of T”". Before that the wording did not include the word "unqualified".
Type compatibility rules C (which among other things govern assignment and initializations) require exact match of function return types. For which reason before the aforementioned update the following initialization would've been considered invalid
int (*fn)(const int) = &foo;GCC does issue a diagnostic for this initialization for all `-std=...` settings before C11. Meanwhile, Clang keeps complaining about this initialization regardless of `-std=...` setting (a bug in Clang apparently).
---
1) When I look through my collection of drafts, the first one where the word "unqualified" appears is that of C17. However, when I play aroung with GCC it is the `-std=c11` setting that triggers the change in diagnostics.