Составной оператор (C)
Составной оператор (так называемый "блок") обычно используется как тело другого оператора, например выражения if
. Описания форм и значений объявлений, которые используются в заголовке составного оператора, см. в статье Объявления и типы.
Синтаксис
compound-statement
:
{
declaration-list
необ. statement-list
необ. }
declaration-list
:
declaration
declaration-list
declaration
statement-list
:
statement
statement-list
statement
Если используются объявления, они должны задаваться до всех операторов. Область видимости каждого идентификатора, объявленного в начале составной инструкции, начинается в точке его объявления и завершается в конце блока. Он отображается во всем блоке, если объявление одного и того же идентификатора не существует во внутреннем блоке.
Предполагается, что идентификаторы в составном операторе имеют модификатор auto
если иное явно не объявлено при помощи ключевых слов register
, static
или extern
. Это не относится к функциям, которые могут быть только extern
. В объявлении функции можно опустить описатель extern
, и функция все равно будет extern
.
Хранилище не выделяется и инициализация не допускается, если переменная или функция объявлена в составной инструкции с классом extern
хранилища. Такое объявление относится к внешней переменной или функции, которая определена в другом месте.
При каждом входе в составной оператор выполняется повторное выделение памяти, а если нужно, то и повторная инициализация, для переменных, объявленных в блоке с ключевым словом auto
или register
. Эти переменные больше не определяются после завершения составной инструкции. Если внутри блока объявлена переменная с атрибутом static
, то она инициализируется один раз в начале выполнения программы и сохраняет значение на протяжении всего выполнения программы. Дополнительные сведения о ключевом слове static
можно найти в статье Классы хранения.
Ниже показан пример составного оператора:
if ( i > 0 )
{
line[i] = x;
x++;
i--;
}
Если i
в этом примере больше 0, то все инструкции внутри составного оператора выполняются в порядке их расположения.