Массивы переменной длины не инициализируются по умолчанию и не могут быть инициализированы явно, за исключением того, что процедуры выделения памяти, такие как calloc
, могут инициализировать пространство.
C 2018 6.7.6.2 («Деклараторы массива» ) 2 говорит:
… Если идентификатор объявляется как объект со стати c или продолжительностью хранения потока, он не должен иметь тип массива переменной длины.
Таким образом, продолжительность хранения массива переменной длины должна быть одной из других длительностей хранения: automati c или выделенная [6.2.4 1]. (Существует временная продолжительность хранения, но только для структур или объединений [6.2.4 7].)
6.7.9 10 говорит, что объекты с автоматическим c сроком хранения не инициализируются по умолчанию:
Если объект, имеющий автоматическую c продолжительность хранения, не инициализируется явно, его значение является неопределенным…
Кроме того, 6.7.9 3 говорит, что вы не можете инициализировать массивы переменной длины явно :
Тип инициализируемого объекта должен быть массивом неизвестного размера или полным типом объекта, который не является типом массива переменной длины.