Ответ 1
static в объявлении массива параметров
void f(int a[static 10]);
static
Здесь указывается, что параметр a
является указателем на int
, но объект objet массива (где a
является указателем на его первый элемент) имеет не менее 10
элементов.
Тогда компилятор имеет право предположить, что аргумент f
не является NULL
, и поэтому он может выполнять некоторые оптимизации. gcc
в настоящее время не выполняет оптимизацию (источник):
"Информация, предоставляемая static в объявлениях массива параметров, не используется для оптимизации. Возможно, имеет смысл использовать ее в будущем в связи с работой по предварительной выборке".
определитель в объявлении массива параметров
void g(int a[cvr 10]);
внутри g
a
является указателем cvr для int
(cvr is const
, volatile
или restrict
qualifier). Например, с const
это означает, что a
является указателем const
к int
(т.е. Type int * const
).
Итак, объявление параметра:
T param[cvr e]
совпадает с объявлением параметра:
T * cvr param
* в объявлении массива параметров
void h(int a[*]);
[*]
в объявлении параметра формального массива в объявлении функции (который не является частью определения функции) указывает, что формальный массив является массивом переменной длины.