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