现在,关键字 static 可以出现在函数声明符中参数的数组声明符中,表示编译器至少可以假定许多元素将传递到所声明的函数中。使优化器能够作出以其他方式无法确定的假定。
C 编译器会将数组参数调整为指针,因此 void foo(int a[]) 与 void foo(int *a) 相同。
如果您指定 void foo(int * restrict a); 等类型限定符,则 C 编译器使用实质上与声明受限指针相同的数组语法 void foo(int a[restrict]); 表示它。
C 编译器还使用 static 限定符保留关于数组大小的信息。例如,如果您指定 void foo(int a[10]),则编译器仍将其表示为 void foo(int *a)。按以下所示使用 static 限定符:void foo(int a[static 10]),让编译器知道指针 a 不是 NULL,并且使用它可访问至少包含十个元素的整数数组。