1.7. Метки, оператор goto, условные конструкции, оператор break, функция exit

Оператор безусловного перехода записывается в виде

goto метка ;

где метка - это некоторый идентификатор, использованный в данной функции в виде метка : оператор . Имена меток никак не описываются в программе и распознаются компилятором по контексту. Передача управления разрешена на любой помеченный оператор в теле функции. Однако в С++ существует одно ограничение : запрещено обходить описания, содержащие инициализацию объ­ектов. Это ограничение не распространяется на вложенные блоки, которые мож­но обходить целиком.

Перед рассмотрением условных конструкций еще раз отметим, что в языке С в явном виде булевский, или логический, тип данных отсутствует, а значения true и false обозначаются соответственно ненулевым и нулевым значениями. Такой подход лишает компилятор языка С возможности выявления определенного класса ошибок. Например, с точки зрения языка С, каждое из следующих двух выражений корректно и имеет значение true: 1<10<100 , 100<10<1 . Для второго выражения: 100<10 дает 0 (false) и 0<1 дает true. Другой пример : если i и k -целые переменные, то когда вместо выражения i<k по ошибке будет записано выражение i+k , то компилятор не в состоянии будет обнаружить эту ошибку.

В языке C есть особая операция, которая называется "операция выбора" ( обозначается как ?: ), она применяется к трем операндам и записывается в виде ( логическое выражение ) ? выражение! : выражение2

В данном случае в качестве логического может использоваться любое выра­жение; оно интерпретируется как ложное, если его значение равно нулю, и какистинное во всех остальных случаях. Результат операции выбора равен значению выражение!, если логическое выражение истинно, и значению выражение2, ес­ли логическое выражение ложно. Тип результата операции равен старшему из типов выражения! и выражения2. Операция выбора старше операций присваи­вания и младше всех других операций, несколько записанных подряд операций выбора выполняются в последовательности справа налево. Например, выраже­ние (a<0)?-a:a дает абсолютную величину a.

Условный оператор if в языке С записывается в виде:

if ( логическое выражение ) оператор/блок [ e1se оператор/блок ]

Логическое выражение (обязательно заключенное в круглые скобки) - это любое выражение, считающееся истинным, если оно не равно нулю. Условный оператор в свою очередь может включать условный оператор, таким образом до­пустимы вложенные условные операторы. Синтаксис языка предполагает, что при вложениях условных операторов каждое e1se соответствует ближайшему к нему предшествующему if. Отличие от языка PASCAL состоит лишь в отсутст­вии ключевого слова THEN и в том, что перед e1se ставится ; .

Условный оператор switch имеет вид :

switch ( выражение ) {

case кв1 : [ операторы! ] case кв2 : [ операторы2 ]

defau1t :   [ операторы ] }

выражение должно иметь целый тип ; кв! , кв2 и т.д. - константные выраже­ния целого типа. Порядок выполнения оператора switch следующий: вычисляет­ся выражение в скобках, если его значение равно значению какого либо из кон­стантных выражений, происходит переход к первому из операторов, стоящих после этого константного выражения, в противном случае - к оператору, стояще­му после метки defau1t, затем операторы выполняются последовательно. Метку defau1t не обязательно включать в оператор. Выхода из оператора switch при достижении следующего case или метки defau1t не происходит - в отличие от аналогичного оператора CASE языка PASCAL. Однако эти действия можно за­дать явно, используя специальный оператор выхода break; , который можно включить в последовательности выполняемых операторов. Оператор break ана­логичен по своему действию процедуре Break в языке PASCAL, он вызывает не­медленное завершение выполнения условной или циклической конструкции, в частности, оператора switch.

В любом месте любой функции для остановки программы можно использо­вать функцию void exit(int status) , где status - код завершения, передаваемый операционной системе.  Функция exit аналогична процедуре Halt в языке

PASCAL.