memccpy se define como:
void *memccpy(void *dest, const void *src, int c, size_t n) Entiendo que el entero c se usa como un unsigned char por conversión de tipo.
Entonces yo creo
void *memccpy(void *dest, const void *src, unsigned char c, size_t n) Se ve mejor. ¿Hay alguna razón por la que memccpy deba usar un parámetro int ?
En la antigua C, no había forma de pasar un argumento como un unsigned char ; todos los argumentos se promovieron al menos a int . Cambiar el tipo de parámetro a unsigned char ahora rompería la compatibilidad. (Eso podría solucionarse, pero no hay demanda para ello).