|  9. Операторы Операторы выполняются последовательно во всех случаях кроме особо оговоренных.
 9.1 Оператор выражениеБольшинство операторов  является операторами  выражение,  которые имеют вид
 
	выражение ;
 Обычно операторы  выражение являются  присваиваниями  и  вызовами функций.
 9.2 Составной оператор, или блокСоставной оператор  (называемый также  "блок", что  эквивалентно)
дает возможность использовать несколько операторов в том месте, где
предполагается использование одного:
 
	составной_оператор:
	     { список_описаний opt список_операторов opt }
	список_описаний:
	     описание
	     описание список_описаний
	список_операторов:
	     оператор
	     оператор список_операторов
Если какой-либо  из идентификаторов  в списке_описаний  был ранее
описан, то  внешнее описание  выталкивается  на  время  выполнения
блока, и снова входит в силу по его окончании.
 Каждая инициализация  auto или   register переменных производится
всякий раз при входе в голову блока. В блок делать передачу; в этом
случае  инициализации  не  выполняются.  Инициализации  переменных,
имеющих класс памяти static (#4.2) осуществляются только один раз в
начале выполнения программы.
 9.3 Условный операторЕсть два вида условных операторов
 
	if ( выражение ) оператор
	if ( выражение ) оператор else оператор
 В обоих  случаях вычисляется  выражение, и  если оно  не ноль, то
выполняется первый подоператор. Во втором случае второй подоператор
выполняется, если  выражение есть  0. Как  обычно,  неоднозначность
"else"  разрешается   посредством  того,  что  else  связывается  с
последним встреченным if, не имеющим else.
 9.4 Оператор whilеОператор while имеет вид
 
	while ( выражение ) оператор
 Выполнение   подоператора повторяется,  пока  значение  выражения
остается ненулевым.  Проверка выполняется  перед каждым  выполнением
оператора.
 9.5 Оператор dоОператор do имеет вид
 
	do оператор while (выражение);
  Выполнение   подоператора  повторяется до тех пор, пока значение
выражения не  станет  нулем.  Проверка  выполняется  после  каждого
выполнения оператора.
 9.6 Оператор forОператор for имеет вид
 
	for (  выражение_1 opt  ; выражение_2  opt ; выражение_3 opt )
	     оператор
Этот оператор эквивалентен следующему: 
	выражение_1;
	while                                            (выражение_2)
	                                                             {
	                                                      оператор
	                                                  выражение_3;
	  }
Первое выражение  задает инициализацию  цикла;  второе  выражение
задает осуществляемую  перед каждой  итерацией проверку, по которой
производится выход  из  цикла,  если  выражение  становится  нулем;
третье выражение  часто задает приращение, выполняемое после каждой
итерации.
 Каждое  или   все  выражения   могут  быть   опущены.  Отсутствие
выражения_2 делает  подразумеваемое while-предложение  эквивалентным
while(1);  остальные  опущенные  выражения  просто  пропускаются  в
описанном выше расширении.
 9.7 Оператор switchОператор  switch   вызывает  передачу   управления  на   один  из
нескольких операторов в зависимости от значения выражения. Он имеет
вид
 
	switch ( выражение ) оператор
  Выражение  должно быть  целого типа  или типа  указателя.  Любой
оператор внутри  оператора  может  быть  помечен  одним  или  более
префиксом case следующим образом:
 
	case      константное_выражение :
где константное  выражение должно иметь тот же тип что и выражение-
переключатель; производятся  обычные арифметические преобразования.
В одном операторе switch никакие две константы, помеченные case, не
могут  иметь   одинаковое  значение.  Константные  выражения  точно
определяются в #15. Может также быть не более чем один префикс оператора вида
 
	default :
 Когда  выполнен   оператор  switch,   проведено  вычисление   его
выражения и  сравнение его  с каждой  case константой. Если одна из
констант равна  значению выражения,  то  управление  передается  на
выражение, следующее  за подошедшим  префиксом case.  Если  никакая
case константа  не соответствует выражению, и есть префикс default,
то управление  передается на  выражение, которому  он предшествует.
Если нет  соответствующих вариантов  case  и default отсутствует, то
никакой из операторов в операторе switch не выполняется.
 Префиксы  case    и  default  сами  по  себе  не  изменяют  поток
управления, который  после задержки  идет дальше, перескакивая через
эти префиксы. Для выхода из switch см. break, #9.8.
 Обычно зависящий  от switch оператор является составным. В голове
этого   оператора   могут   стоять   описания,   но   инициализации
автоматических и регистровых переменных являются безрезультатными.
 9.8 Оператор breakОператор
 
	break ;
прекращает выполнение  ближайшего охватывающего while,  do, for или
switch   оператора; управление передается на оператор, следующий за
законченным. 9.9 Оператор contiпиеОператор
 
	continue ;
вызывает передачу  управления  на  управляющую  продолжением  цикла
часть наименьшего  охватывающего оператора  while, do  или for;  то
есть на конец петли цикла. Точнее, в каждом из операторов 
	while (...)         do                  for (...)
	  {                   {                   {
	    ...                 ...                 ...
	    contin:;            contin:;            contin:;
	  }                   }                   }
	                    while (...);
continue эквивалентно  goto  contin.  (За  contin:  следует  пустой
оператор, #9.13.)9.10 Оператор returпВозврат из  функции  в  вызывающую  программу  осуществляется  с
помощью оператора return, имеющего один из двух видов:
 
	 return ;
	 return выражение ;
  Первый  может использоваться  только в функциях, не возвращающих
значения, т.е.  в функциях  с типом  возвращаемого  значения  void.
Вторая  форма   может  использоваться   только   в   функциях,   не
возвращающих значение;  вызывающей функцию  программе  возвращается
значение выражения.  Если необходимо,  то выражение  преобразуется,
как это  делается при  присваивании, к  типу функции, в которой оно
возникло. Обход  конца функции  эквивалентен  возврату  return  без
возвращаемого значения.
 9.11 Оператор gotоМожно  осуществлять  безусловную  передачу  управления  с  помощью
оператора
 
	 goto идентификатор ;
 Идентификатор  должен  быть  меткой    (#9.12),  расположенной  в
текущей функции.
 9.12 Помеченные операторыПеред любым оператором может стоять префикс метка, имеющий вид
 
	идентификатор :
который  служит   для  описания  идентификатора  как  метки.  Метка
используется только  как объект  для goto. Областью видимости метки
является текущая  функция, исключая  любой подблок,  в котором  был
переописан такой же идентификатор. См. #4.1. 9.13 Пустой операторПустой оператор имеет вид
 
	;
 Пустой оператор  используется для помещения метки непосредственно
перед  }  составного  оператора  или  того,  чтобы  снабдить  такие
операторы, как while, пустым телом.
 9.14 Оператор deletеОператор delete имеет вид
 
	delete выражение ;
 Результатом выражения  должен быть  указатель. Объект, на который
он  указывает,   уничтожается.  Это  значит,  что  после  оператора
уничтожения  delete   нельзя  гарантировать,   что   объект   имеет
определенное значение;  см. #17.  Эффект от  применения  delete    к
указателю, не  полученному из  операции new   (#7.1),  не определен.
Однако, уничтожение указателя с нулевым значением безопасно.
 9.15 Оператор asмОператор asm имеет вид
 
	asm ( строка) ;
 Смысл оператора  asm  не определен.  Обычно  он  используется  для передачи информации через компилятор ассемблеру.
 
Назад | Содержание | Вперед 
 |