Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бочков C.. Язык программирования Си для персонального компьютера - royallib.ru.doc
Скачиваний:
39
Добавлен:
11.03.2016
Размер:
901.98 Кб
Скачать

Оператор разрыва break

Синтаксис:

break;

Действие:

Оператор разрыва break прерывает выполнение операторов do , for , while или switch . Он может содержаться только в теле этих операторов. Управление передается оператору программы, следующему за прерванным. Появление оператора break вне операторов do , for , while , switch компилятор рассматривает как ошибку.

Если оператор разрыва break записан внутри вложенных операторов do , for , while , switch , то он завершает только непосредственно охватывающий его оператор do , for , while , switch . Если же требуется завершение более чем одного уровня вложенности, следует использовать операторы возврата return и перехода goto .

Пример:

for(i = 0; i < LENGTH; i++) {

for(j = 0; j < WIDTH; j++)

if(lines[i][j] == '\0') break;

lengths[i] = j;

}

В вышеприведенном примере построчно обрабатывается массив строк переменной длины lines . Именованная константа LENGTH задает количество строк в массиве LINES. Именованная константа WIDTH задает максимально допустимую длину строки. Задача состоит в заполнении массива lengths длинами всех строк массива lines . Оператор разрыва break прерывает выполнение внутреннего цикла for при обнаружении признака конца символьной строки ( \0'). После этого i-му элементу одномерного массива length [i] присваивается длина i-й строки в байтах. Управление передается внешнему оператору цикла for . Переменная i инкрементируется и процесс повторяется до тех пор, пока значение i не станет больше или равно значению константы LENGTH.

Оператор перехода goto

Синтаксис:

goto <метка >;

.

.

.

<метка >: <оператор >

Действие:

Оператор перехода goto передает управление непосредственно на <оператор >, помеченный <меткой >. Метка представляет собой обычный идентификатор, синтаксис которого описан в разделе 1.3. Область действия метки ограничивается функцией, в которой она определена; из этого следует, во-первых, что каждая метка должна быть отлична от других меток в той же самой функции; во-вторых, что нельзя передать управление по оператору goto в другую функцию.

Помеченный оператор выполняется сразу после выполнения оператора goto . Если оператор с данной меткой отсутствует или существует более одного оператора, помеченного той же меткой, то компилятор сообщает об ошибке. Метка оператора имеет смысл только для оператора goto . При последовательном выполнении операторов помеченный оператор выполняется так же, как если бы он не имел метки.

Можно войти в блок, тело цикла, условный оператор, оператор-переключатель по метке.

Нельзя с помощью оператора goto передать управление на конструкции case и default в теле переключателя.

Пример:

if(errorcode > 0) goto exit;

exit: return (errorcode);

В примере оператор перехода goto передает управление на оператор, помеченный меткой exit , если errorcode больше нуля.

Оператор возврата return

Синтаксис:

return [<выражение >];

Действие:

Оператор возврата return заканчивает выполнение функции, в которой он содержится, и возвращает управление в вызывающую функцию. Управление передается в точку вызывающей функции, непосредственно следующую за оператором вызова. Значение <выражения >, если оно задано, вычисляется, приводится к типу, объявленному для функции, содержащей оператор возврата return , и возвращается в вызывающую функцию. Если <выражение > опущено, то возвращаемое функцией значение не определено.

Пример:

main()

{

void draw(int, int);

long sq(int);

у = sq(x);

draw(x, y);

}

long sq(int x)

{

return (x*x);

}

void draw(int x, int y)

{

return,

}

Функция main вызывает две функции, sq и draw. Функция sq возвращает значение квадрата x . Это значение присваивается переменной у . Функция draw объявлена с типом void , как не возвращающая значения. Попытка присвоить значение. возвращаемое функцией draw , привело бы к сообщению компилятора об ошибке.

<Выражение > в операторе возврата return принято заключать в скобки, как показано в примере. Это, однако, не является требованием языка.

Если оператор return отсутствует в теле функции, то управление автоматически передается в вызывающую функцию после выполнения последнего оператора в вызванной функции, т. е. по достижении последней закрывающей фигурной скобки. Возвращаемое значение вызванной функции в этом случае не определено. Если возвращаемое значение не требуется, то функцию следует явно объявлять с типом void .

Распространенной ошибкой является наличие в функции, которая должна возвращать значение, операторов возврата, как с выражением, так и без него.