C99允许将类型限定词和存储类限定词static等放在函数原型和函数头部的形式参量所属的初始方括号内。对于类型限定词的情形,这样做为已有功能提供了一个可选语法。例如,下面是一个使用旧语法的声明:
void ofmouth (int * const a1, int * restrict a2, int n); // 以前的风格
它表明a1是一个指向int的const指针,a2是一个受限指针。等价的新语法如下:
void ofmouth (int a1[const], int a2[restrict], int n); // C99允许
static的情形是不同的,因为它引发了一些新问题。例如,考虑如下原型:
double stick (double ar[static 20];
使用static表明在函数调用中,实际参数将是一个指向数组首元素的指针,该数组至少具有20个元素(即使用“static n”来表示保证至少有n个元素)。这样做的目的是允许编译器使用这个信息来优化函数的代码。
和restrict相同,关键字static有两个读者。一个是编译器,它告诉编译器可以自由地做一些有关优化的假定。另一个是用户,它告诉用户仅使用满足static要求的参数(至少有所保证个数的元素)。
ref:《C Primer Plus》