Ключевое слово restrict внутри квадратных скобок

Просматривая стандарт POSIX наткнулся на такое объявление:

#include <aio.h>

int lio_listio(int mode, struct aiocb *restrict const list[restrict],
       int nent, struct sigevent *restrict sig);

(Выделение добавлено.) Я понимаю, что значит ключевое слово restrict в общем случае, но что оно означает здесь?


Ответы (2 шт):

Автор решения: HolyBlackCat

Нашел. Черновик C11, 6.7.6.3/7:

A declaration of a parameter as ‘‘array of type’’ shall be adjusted to ‘‘qualified pointer to type’’, where the type qualifiers (if any) are those specified within the [ and ] of the array type derivation.

Получается, void foo(int x[restrict]); эквивалентно void foo(int *restrict x);. Это можно проверить, написав два объявления рядом и убедившись в отсутствии ругани компилятора на разные типы.

→ Ссылка
Автор решения: AlexGlebe

такое сделали чтобы можно было указать и размер массива и что указатель на массив индивидуальный. void f(int a[restrict 9]); При декларации как указатель void f(int * restrict a); количество не проставишь.

В вашем случае [restrict] в квадратных скобках означает всего-лишь, что список list - это массив, а не указатель на один элемент.

→ Ссылка