Составной оператор ограничивается фигурными скобками. Все другие операторы заканчиваются точкой с запятой (;). Точка с запятой в языке Си является признаком конца оператора, а не разделителем операторов, как в ряде других языков программирования.
Перед любым оператором языка Си может быть записана метка, состоящая из имени и двоеточия. Операторные метки распознаются только оператором goto (см. раздел 5.12 "Оператор перехода goto").
Программа на языке Си выполняется последовательно, оператор за оператором, за исключением случаев, когда какой-либо оператор явно передает управление в другую часть программы, например при вызове функции или возврате из функции.
Пустой оператор
Синтаксис:
;
Действие:
Пустой оператор — это оператор, состоящий только из точки с запятой. Он может появиться в любом месте программы, где по правилам синтаксиса требуется оператор. Выполнение пустого оператора не меняет состояния программы.
Пример:
for(i = 0; i < 10; line[i++] = 0);
Для таких операторов, как do, for, if, while, требуется, чтобы в их теле был хотя бы один оператор. Пустой оператор удовлетворяет требованиям синтаксиса в случаях, когда никаких действий не требуется. В приведенном примере третье выражение в заголовке оператора цикла for инициализирует первые 10 элементов массива line нулем. Тело оператора for состоит из пустого оператора, поскольку нет необходимости в других операторах.
Пустой оператор, подобно любому другому оператору языка Си, может быть помечен меткой. Например, чтобы пометить закрывающую фигурную скобку составного оператора, которая не является оператором, нужно вставить перед ней помеченный пустой оператор.
Составной оператор
Синтаксис:
{
[<
.
.
.
[<
}
Действие:
Действие составного оператора заключается в последовательном выполнении содержащихся в нем операторов, за исключением тех случаев, когда какой-либо оператор явно передает управление в другое место программы.
В начале составного оператора могут содержаться объявления (см. разделы 3.6, 3.6.2). Они служат для определения переменных, локальных для данного блока, либо для распространения на данный блок области действия глобальных объектов.
Пример:
if(i > 0) {
line[i] = х;
х++;
}
Типично использование составного оператора в качестве тела другого оператора, например оператора if. В приведенном примере, если i больше нуля, будут последовательно выполнены операторы, содержащиеся в составном операторе.
Подобно другим операторам языка Си, любой оператор внутри составного оператора может быть помечен. Передача управления по метке внутрь составного оператора возможна, однако если составной оператор содержит объявления переменных с инициализацией, то при входе в блок по метке эта инициализация не будет выполнена и значения переменных будут непредсказуемы.
Можно поставить метку и на сам составной оператор, если только это не оператор, составляющий тело функции.
Оператор-выражение
Синтаксис:
<
Действие:
<
Примеры:
х = у+3; /*пример 1*/
х++; /*пример 2*/
f(x); /*пример 3*/
В первом примере х присваивается значение у+3. Во втором примере х инкрементируется.
В третьем примере показано выражение вызова функции. Если функция возвращает значение, то обычно оператор-выражение содержит операцию присваивания, чтобы запомнить значение, возвращаемое вызванной функцией. В данном примере возвращаемое значение не используется.
Условный оператор if
Синтаксис:
if(<
<
[else
<
Действие:
Тело условного оператора if выполняется в зависимости от значения <
Сначала вычисляется <
Если значение <
Пример:
if(i > 0)
У = х/i;
else {
х = 1;
у = f(x);
}
В примере, если i больше нуля, выполняется оператор у=x/i;. Если i меньше или равно нулю, то значение i присваивается переменной х, а значение, возвращаемое функцией f(x), присваивается переменной у.
Оператор if может быть вложен в <