Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++ Страуструп.doc
Скачиваний:
4
Добавлен:
18.04.2019
Размер:
2.72 Mб
Скачать

3.3.2 Оператор goto

Презираемый оператор goto все-таки есть в С++:

goto идентификатор;

идентификатор: оператор

Вообще говоря, он мало используется в языках высокого уровня, но

может быть очень полезен, если текст на С++ создается не человеком,

а автоматически, т.е. с помощью программы. Например,

операторы goto используются при создании анализатора по заданной

грамматике языка с помощью программных средств.

Кроме того, операторы goto могут пригодиться в тех случаях,

когда на первый план выходит скорость работы программы. Один из

них - когда в реальном времени происходят какие-то вычисления во

внутреннем цикле программы.

Есть немногие ситуации и в обычных программах, когда применение

goto оправдано. Одна из них - выход из вложенного цикла или

переключателя. Дело в том, что оператор break во вложенных циклах

или переключателях позволяет перейти только на один уровень выше.

Приведем пример:

void f()

{

int i;

int j;

for ( i = 0; i < n; i++)

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

if (nm[i][j] == a) goto found;

// здесь a не найдено

// ...

found:

// nm[i][j] == a

}

Есть еще оператор continue, который позволяет перейти на конец

цикла. Что это значит, объяснено в $$3.1.5.

3.4 Комментарии и расположение текста

Программу гораздо легче читать, и она становится намного понятнее, если

разумно использовать комментарии и систематически выделять текст

программы пробелами. Есть несколько способов расположения текста

программы, но нет причин считать, что один из них - наилучший. Хотя

у каждого свой вкус. То же можно сказать и о комментариях.

Однако можно заполнить программу такими комментариями, что читать

и понимать ее будет только труднее. Транслятор не в силах понять

комментарий, поэтому он не может убедиться в том, что комментарий:

[1] осмысленный,

[2] действительно описывает программу,

[3] не устарел.

Во многих программах попадаются непостижимые, двусмысленные и просто

неверные комментарии. Лучше вообще обходиться без них, чем давать

такие комментарии.

Если некий факт можно прямо выразить в языке, то так и следует

делать, и не надо считать, что достаточно упомянуть его в комментарии.

Последнее замечание относится к комментариям, подобным приведенным

ниже:

// переменную "v" необходимо инициализировать.

// переменная "v" может использоваться только в функции "f()".

// до вызова любой функции из этого файла

// необходимо вызвать функцию "init()".

// в конце своей программы вызовите функцию "cleanup()".

// не используйте функцию "weird()".

// функция "f()" имеет два параметра.

При правильном программировании на С++ такие комментарии обычно

оказываются излишними. Чтобы именно эти комментарии стали ненужными,

можно воспользоваться правилами связывания ($$4.2) и областей

видимости, а также правилами инициализации и уничтожения объектов

класса ($$5.5).

Если некоторое утверждение выражается самой программой, не нужно

повторять его в комментарии. Например:

a = b + c; // a принимает значение b+c

count++; // увеличим счетчик count

Такие комментарии хуже, чем избыточные. Они раздувают объем текста,

затуманивают программу и могут быть даже ложными. В то же время

комментарии именно такого рода используют для примеров в учебниках

по языкам программирования, подобных этой книге. Это одна из

многих причин, по которой учебная программа отличается от настоящей.

Можно рекомендовать такой стиль введения комментариев в

программу:

[1] начинать с комментария каждый файл программы: указать в

общих чертах, что в ней определяется, дать ссылки на

справочные руководства, общие идеи по сопровождению

программы и т.д.;

[2] снабжать комментарием каждое определение класса или шаблона

типа;

[3] комментировать каждую нетривиальную функцию, указав: ее

назначение, используемый алгоритм (если только он неочевиден)

и, возможно, предположения об окружении, в котором работает

функция;

[4] комментировать определение каждой глобальной переменной;

[5] давать некоторое число комментариев в тех местах, где

алгоритм неочевиден или непереносим;

[6] больше практически ничего.

Приведем пример:

// tbl.c: Реализация таблицы имен.

/*

Использован метод Гаусса

см. Ральстон "Начальный курс по ..." стр. 411.

*/

// в swap() предполагается, что стек AT&T начинается с 3B20.

/************************************

Авторские права (c) 1991 AT&T, Inc

Все права сохранены

**************************************/

Правильно подобранные и хорошо составленные комментарии играют в

программе важную роль. Написать хорошие комментарии не менее

трудно, чем саму программу, и это - искусство, в котором стоит

совершенствоваться.

Заметим, что если в функции используются только комментарии

вида //, то любую ее часть можно сделать комментарием с помощью

/* */, и наоборот.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]