Por qué se usa _PROTOTYPE archivos de cabecera

¿Por qué usamos _PROTOTYPE por ejemplo _PROTOTYPE (void * memset, (void * _s, int _c, size_t _n) lo vi en el código fuente de MINIX3

Porque como dice el bloque de encabezado, no sabían si se iba a utilizar un comstackdor ANSI o K&R, y este marco les permite mantener los parámetros en una comstackción ANSI y desecharlos en una comstackción K&R.

00033 /* Keep everything for ANSI prototypes. */ 00034 #define _PROTOTYPE(function, params) function params 

verso

 00045 /* Throw away the parameters for K&R prototypes. */ 00046 #define _PROTOTYPE(function, params) function() 

lo que significa

 00483 _PROTOTYPE( void _exit, (int _status) ); 

se convierte en ANSI:

 void _exit(int _status); 

y bajo K&R:

 void _exit(); 

El código fuente al que enlazaste lo explica:

00009 * Si _ANSI termina por definirse, una macro
00010 *
00011 * _PROTOTYPE (función, parámetros)
00012 *
00013 * está definido. Esta macro se expande de diferentes maneras, generando ya sea
00014 * Prototipos C ANSI estándar o K&R de estilo antiguo (Kernighan y Ritchie)
00015 * prototipos, según sea necesario. Finalmente, algunos progtwigs usan _CONST, _VOIDSTAR, etc.
00016 * de tal manera que sean portátiles sobre comstackdores tanto ANSI como K&R.
00017 * Las macros apropiadas se definen aquí.

Los prototipos K&R de estilo antiguo tienen los nombres de los argumentos primero, luego los tipos:

 int foobar (x, y) int x; float *y; { /* code */ } 

Los prototipos estándar ANSI combinan ambos al principio:

 int foobar (int x, float *y) { /* code */ } 

La macro _PROTOTYPE crea una firma apropiada de cualquier tipo dependiendo de si se define o no _ANSI . En este caso específico, las firmas K&R se usan para implementaciones de funciones, pero las declaraciones de funciones incluyen u omiten sus argumentos dependiendo de si se define _ANSI .

Vale la pena señalar que las declaraciones de estilo K & R datan de 1978 y la mayoría del código C actualmente disponible utilizará firmas de estilo ANSI moderno. Es raro que necesites apoyar a ambos.

Para acomodar los estilos de statement de función K&R y ANSI C. Echa un vistazo al artículo de Wikipedia sobre la evolución de C.