Ключевое слово restrict внутри квадратных скобок
Просматривая стандарт POSIX наткнулся на такое объявление:
#include <aio.h>
int lio_listio(int mode, struct aiocb *restrict const list[restrict],
int nent, struct sigevent *restrict sig);
(Выделение добавлено.) Я понимаю, что значит ключевое
слово restrict в общем случае, но что оно
означает здесь?
Ответы (2 шт):
Нашел. Черновик C11, 6.7.6.3/7:
A declaration of a parameter as ‘‘array of
type’’ shall be adjusted to ‘‘qualified pointer totype’’, where thetypequalifiers (if any) are those specified within the[and]of the array type derivation.
Получается, void foo(int x[restrict]); эквивалентно void foo(int *restrict x);. Это можно проверить, написав два объявления рядом и убедившись в отсутствии ругани компилятора на разные типы.
такое сделали чтобы можно было указать и размер массива и что указатель на массив индивидуальный. void f(int a[restrict 9]); При декларации как указатель void f(int * restrict a); количество не проставишь.
В вашем случае [restrict] в квадратных скобках означает всего-лишь, что список list - это массив, а не указатель на один элемент.