static в деклараторе массива параметров
void f(int a[static 10]);
static
здесь указывает, что параметр a
является указателем на int
, но что объект массива (где a
является указателем на его первый элемент) имеет по крайней мере 10
элементов.
Тогда компилятор имеет право предположить, что аргумент f
не является NULL
, и поэтому он может выполнить некоторые оптимизации. gcc
в настоящее время оптимизация не выполняется (источник):
«Информация, предоставляемая статическими деклараторами массива параметров, не используется для оптимизации. Возможно, имеет смысл использовать ее в будущем в сочетании с работой над предварительной выборкой».
квалификатор в деклараторе массива параметров
void g(int a[cvr 10]);
внутри g
a
— указатель cvr на int
(cvr — это квалификатор const
, volatile
или restrict
). Например, с const
это означает, что a
является указателем const
на int
(т. е. тип int * const
).
Итак, объявление параметра:
T param[cvr e]
то же самое, что и объявление параметра:
T * cvr param
* в деклараторе массива параметров
void h(int a[*]);
[*]
в объявлении параметра формального массива в объявлении функции (которое не является частью определения функции) указывает, что формальный массив является массивом переменной длины.
person
ouah
schedule
09.07.2013