Каково назначение статического ключевого слова в параметре массива функции типа «char s [статические 10]»?

129
задан Ciro Santilli 新疆改造中心法轮功六四事件 10 May 2016 в 20:23
поделиться

1 ответ

Первое объявление сообщает компилятору, что someArray имеет не менее 100 элементов. Это можно использовать для оптимизации. Например, это также означает, что someArray никогда не имеет значения NULL.

Обратите внимание, что стандарт C не требует, чтобы компилятор диагностировал, когда вызов функции не соответствует этим требованиям (т.е. это молчаливое неопределенное поведение).

Второе объявление просто объявляет someArray (а не элементы someArray !) Как const, то есть вы не можете записать someArray = someOtherArray . Это то же самое, как если бы параметр был char * const someArray .

Этот синтаксис можно использовать только внутри самого внутреннего [] декларатора массива в списке параметров функции, он не имел бы смысла в других контекстах.

Стандартный текст, который охватывает оба вышеупомянутых случая, находится в C11 6.7.6.3/7 (было 6.7.5.3/7 в C99):

Объявление параметра как «массив типа» должно быть скорректировано как «квалифицированный указатель на тип», где квалификаторы типа (если есть) - те, которые указаны в [ и ] производного типа массива. Если ключевое слово static также появляется в пределах [ и ] производного типа массива, то для каждого вызова функции значение соответствующего фактического аргумента должно обеспечивать доступ к первому элемент массива не менее чем с таким же количеством элементы, как указано в выражении размера.

116
ответ дан 24 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: