Longitudes de matriz en parámetros de matriz

Estoy leyendoProgramación en C: un enfoque moderno por K.N.King para aprender el lenguaje de programación C y el capítulo actual habla sobre las funciones y también los parámetros de la matriz. Se explica que uno puede usar construcciones como estas para expresar la longitud de los parámetros de la matriz:

1)

void myfunc(int a, int b, int[a], int[b], int[*]); /* prototype */

void myfunc(int a, int b, int n[a], int m[b], int c[a+b+other_func()]) {
... /* body */
}

2)

void myfunc(int[static 5]); /* prototype */

void myfunc(int a[static 5]) {
... /* body */
}

Entonces las preguntas son:

a. ¿Las construcciones del ejemplo 1 son puramente cosméticas o tienen un efecto en el compilador?

si. Es elstatic modificador en este contexto solo de naturaleza cosmética? ¿Qué significa y qué hace exactamente?

C. ¿También es posible declarar un parámetro de matriz como este; ¿Y es tan cosmético como el ejemplo 1?

void myfunc(int[4]);

void myfunc(int a[4]) { ... }

Respuestas a la pregunta(1)

Su respuesta a la pregunta