Поделиться через


Составной оператор (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, то все инструкции внутри составного оператора выполняются в порядке их расположения.

См. также

Отчеты