This is a new feature of C99. It allows a compiler to generate code which
can run faster on machines.
The `static' storage class specifier can appear inside [ and ] of an array
declarator of function parameters. For example, in the function:
void function_name ( char s[static 5], char t[static 5] );
the static specifier gurantees that at least 5 elements pointed by the pointers,
s and t each, are available. Hence, the compiler can generate code to prefetch
the 5 elements in advance. Functionally, it is equivalent to:
void function_name ( char s[5], char t[5] );
But, it is not guaranteed that s and t, in the above declaration, will point
to disjoint objects. On the other hand, the following declaration says that s
and t point to disjoint (array) objects containing, at least, 5 character
elements:
void function_name ( char s[restrict static 5],
char t[restrict static 5] );
In addition to the above information, this usage also guarantees that the
pointers are not NULL, and point to appropriate objects.
               (
geocities.com/vijoeyz/faq)                   (
geocities.com/vijoeyz)