Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет79/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   75   76   77   78   79   80   81   82   ...   256
3.3.2 Оператор goto 
Презираемый оператор goto все-таки есть в С++: 
goto идентификатор; 
идентификатор: оператор 
Вообще говоря, он мало используется в языках высокого уровня, но может быть очень полезен, если 
текст на С++ создается не человеком, а автоматически, т.е. с помощью программы. Например, 
операторы goto используются при создании анализатора по заданной грамматике языка с помощью 
программных средств. Кроме того, операторы goto могут пригодиться в тех случаях, когда на первый 
план выходит скорость работы программы. Один из них - когда в реальном времени происходят какие-
то вычисления во внутреннем цикле программы. 


Бьерн Страуструп.
Язык программирования С++ 
 
93 
Есть немногие ситуации и в обычных программах, когда применение goto оправдано. Одна из них - 
выход из вложенного цикла или переключателя. Дело в том, что оператор break во вложенных циклах 
или переключателях позволяет перейти только на один уровень выше. Приведем пример: 
void f() 

int 
i; 
int 
j; 
for ( i = 0; i < n; i++) 
for (j = 0; jif (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 
Такие комментарии хуже, чем избыточные. Они раздувают объем текста, затуманивают программу и 
могут быть даже ложными. В то же время комментарии именно такого рода используют для примеров в 


Бьерн Страуструп.
Язык программирования С++ 
 
94 
учебниках по языкам программирования, подобных этой книге. Это одна из многих причин, по которой 
учебная программа отличается от настоящей. 
Можно рекомендовать такой стиль введения комментариев в программу: 
[1] начинать с комментария каждый файл программы: указать в общих чертах, что в ней 
определяется, дать ссылки на справочные руководства, общие идеи по сопровождению 
программы и т.д.; 
[2] снабжать комментарием каждое определение класса или шаблона типа; 
[3] комментировать каждую нетривиальную функцию, указав: ее назначение, используемый 
алгоритм (если только он неочевиден) и, возможно, предположения об окружении, в котором 
работает функция; 
[4] комментировать определение каждой глобальной переменной; 
[5] давать некоторое число комментариев в тех местах, где алгоритм неочевиден или 
непереносим; 
[6] больше практически ничего. 
Приведем пример: 
// tbl.c: Реализация таблицы имен. 
/* 
Использован метод Гаусса 
см. Ральстон "Начальный курс по ..." стр. 411. 
*/ 
// в swap() предполагается, что стек AT&T начинается с 3B20. 
/************************************ 
Авторские права (c) 1991 AT&T, Inc 
Все права сохранены 
**************************************/ 
Правильно подобранные и хорошо составленные комментарии играют в программе важную роль. 
Написать хорошие комментарии не менее трудно, чем саму программу, и это - искусство, в котором 
стоит совершенствоваться. 
Заметим, что если в функции используются только комментарии вида //, то любую ее часть можно 
сделать комментарием с помощью /* */, и наоборот. 


Достарыңызбен бөлісу:
1   ...   75   76   77   78   79   80   81   82   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет