Язык С


         

Инициализация


Описатель может указывать начальное значение описываемо- го идентификатора. Инициализатор состоит из выражения или заключенного в фигурные скобки списка значений, перед кото- рыми ставится знак =.

Инициализатор: = выражение = \(список-инициализатора\) = \(список-инициализатора,\) список-инициализатора: выражение список-инициализатора,список-инициализатора \(список-инициализатора\)

Все выражения, входящие в инициализатор статической или внешней переменной, должны быть либо константными выражения- ми, описываемыми в п. 23, Либо выражениями, которые сводятся к адресу ранее описанной переменной, возможно смещенному на константное выражение. Автоматические и регистровые перемен- ные могут быть инициализированы произвольными выражениями, включающими константы и ранее описанные переменные и функ- ции. Гарантируется, что неинициализированные статические и внешние переменные получают в качестве начальных значений 0;неинициализированные автоматические и регистровые перемен- ные в качестве начальных значений содержат мусор. Когда инициализатор применяется к скаляру (указателю или объекту арифметического типа), то он состоит из одного выра- жения, возможно заключенного в фигурные скобки. Начальное значение объекта находится из выражения; выполняются те же самые преобразования, что и при присваивании. Когда описываемая переменная является агрегатом (струк- турой или массивом ), то инициализатор состоит из заключен- ного в фигурные скобки и разделенного запятыми списка иници- ализаторов для членов агрегата. Этот список составляется в порядке возрастания индекса или в соответствии с порядком членов. Если агрегат содержит подагрегаты, то это правило применяется рекурсивно к членам агрегата. Если количество инициализаторов в списке оказывается меньше числа членов аг- регата, то оставшиеся члены агрегата заполняются нулями. Запрещается инициализировать объединения или автоматические агрегаты. Фигурные скобки могут быть опущены следующим образом. Если инициализатор начинается с левой фигурной скобки, то последующий разделенный запятыми список инициализаторов ини- циализирует члены агрегата; будет ошибкой, если в списке окажется больше инициализаторов, чем членов агрегата. Если однако инициализатор не начинается с левой фигурной скобки, то из списка берется только нужное для членов данного агре- гата число элементов; оставшиеся элементы используются для инициализации следующего члена агрегата, частью которого яв- ляется настоящий агрегат.



Содержание  Назад  Вперед