Единственная значимая причина сделать это для целей документирования - сообщить будущим пользователям, что функции ожидают получить массив, по крайней мере, такого количества элементов.Но даже это условно - то, о чем вы должны заранее договориться с другими пользователями.Язык (компилятор) в любом случае игнорирует этот размер.Объявление вашей функции эквивалентно void foo(int iz[])
и void foo(int *iz)
.
. Единственный способ сделать его несколько значимым для компилятора - объявить его как
void foo (int iz[static 6])
, который действует какпообещать компилятору, что массив будет содержать не менее 6 элементов, а это означает, что компилятор сможет оптимизировать этот код, используя это предположение.Более того, если вы действительно хотите принять соглашение, упомянутое выше, имеет смысл объявить размеры параметров массива конкретно с static
, поскольку язык явно определяет семантику этой конструкции.
Что вы подразумеваете под "мы получаем полезную ошибку "мне не понятно.Код
int is[2] = {1,2,3};
is[42] = 42;
не содержит каких-либо нарушений ограничений.Это приводит к неопределенному поведению, но не требуется создавать диагностическое сообщение во время компиляции.Другими словами, нет, мы не получаем никакой «полезной ошибки» из этого.