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.


    Source: geocities.com/vijoeyz/faq/c

               ( geocities.com/vijoeyz/faq)                   ( geocities.com/vijoeyz)