Составной оператор (C)

Составной оператор (так называемый "блок") обычно используется как тело другого оператора, например выражения if . Описания форм и значений объявлений, которые используются в заголовке составного оператора, см. в статье Объявления и типы.

Синтаксис

compound-statement:
{declaration-listoptstatement-listopt}

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

См. также

Операторы