¿Por qué no puedo especificar la clase de almacenamiento para parámetros formales de una función?

Cuando hago lo siguiente, el código funciona bien:

#include <stdio.h>
void test( int a)
{
 printf("a=%d\n",a);   
}

int main()
{
    test(10);
    return 1;
}

Pero cuando lo hago

#include <stdio.h>
void test( auto int a) // Or static int a Or extern int a
{
 printf("a=%d\n",a);   
}

int main()
{
    test(10);
    return 1;
}

Genera un error,

error: clase de almacenamiento especificada para el parámetro 'a'

¿Por qué es ese error? ¿Qué sucede internamente (gestión de memoria)?

Pero funciona bien sin ningún error cuando lo hago:

void test( register int a)
{
 printf("a=%d\n",a);   
}

¿Porqué es eso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta