В C99 существуют массивы переменной длины, и в деклараторах массива параметров могут быть статические определители (и классификаторы типов):
void f(int i, int *a);
void f(int i, int a[]);
void f(int i, int a[i]);
void f(int i, int a[*]); // Only allowed in function prototypes.
void f(int i, int a[static i]);
Поскольку параметры функции массива просто распадаются на указатели, существует ли какая-либо практическая разница между предыдущими объявлениями или это вопрос стиля? Когда следует использовать какой-либо из них? В частности, что означает классификатор static
? Стандарт не дает четкой причины для каждого синтаксиса.