Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
24
Добавлен:
02.04.2015
Размер:
382.93 Кб
Скачать

3.3.2 Goto

C++ снабжен имеющим дурную репутацию оператором goto.

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

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

В общем, в программировании высокого уровня он имеет очень мало применений, но он может быть очень полезен, когда C++ программа генерируется программой, а не пишется непосредственно человеком. Например, операторы goto можно использовать в синтаксическом анализаторе, порождаемом генератором синтаксических анализаторов. Оператор goto может быть также важен в тех редких случаях, когда важна наилучшая эффективность, например, во внутреннем цикле какой- нибудь программы, работающей в реальном времени.

Одно из немногих разумных применений состоит в выходе из вложенного цикла или переключателя (break лишь прекращает выполнение самого внутреннего охватывающего его цикла или переключателя). Например:

for (int i = 0; i

3.4 Комментарии и Выравнивание

Продуманное использование комментариев и согласованное использование отступов может сделать чтение и понимание программы намного более приятным. Существует несколько различных стилей согласованного использования отступов. Автор не видит никаких серьезных оснований предпочесть один другому (хотя как и у большинства, у меня есть свои предпочтения). Сказанное относится также и к стилю комментариев.

Неправильное использование комментариев может серьезно повлиять на удобочитаемость программы, Компилятор не понимает содержание комментария, поэтому он никаким способом не может убедиться в том, что комментарий

[1] осмыслен;

[2] описывает программу; и

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

Непонятные, двусмысленные и просто неправильные комментарии содержатся в большинстве программ. Плохой комментарий может быть хуже, чем никакой.

Если что-то можно сформулировать средствами самого языка, следует это сделать, а не просто отметить в комментарии. Данное замечание относится к комментариям вроде:

// переменная "v" должна быть инициализирована.

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

// вызвать функцию init() перед вызовом

// любой другой функции в этом файле.

// вызовите функцию очистки "cleanup()" в конце вашей

программы.

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

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

При правильном использовании C++ подобные комментарии как правило становятся ненужными. Чтобы предыдущие комментарии стали излишними, можно, например, использовать правила компоновки (#4.2 ) и видимость, инициализацию и правила очистки для классов (см.#5.5.2).

Если что-то было ясно сформулировано на языке, второй раз упоминать это в комментарии не следует. Например:

a = b+c; // a становится b+c

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

Такие комментарии хуже чем просто излишни, они увеличивают объем текса, который надо прочитать, они часто затуманивают структуру программы, и они могут быть неправильными.

Автор предпочитает:

[1] Комментарий для каждого исходного файла, сообщающий, для чего в целом предназначены находящиеся в нем комментарии, дающий ссылки на справочники и руководства, общие рекомендации по использованию и т.д.;

[2] Комментарий для каждой нетривиальной функции, в котором сформулировано ее назначение, используемый алгоритм (если он неочевиден) и, быть может, что-то о принимаемых в ней предположениях относительно среды выполнения;

[3] Небольшое число комментариев в тех местах, где программа неочевидна и/или непереносима; и

[4] Очень мало что еще.

Например:

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

/*

Гауссовское исключение с частичным

См. Ralston: "A first course ..." стр. 411.

*/

// swap() предполагает размещение стека AT&T sB20.

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

Copyright (c) 1984 AT&T, Inc.

All rights reserved

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

Удачно подобранные и хорошо написанные комментарии - существенная часть программы. Написание хороших комментариев может быть столь же сложным, сколь и написание самой программы.

Заметьте также, что если в функции используются исключительно комментарии //, то любую часть этой функции можно закомментировать с помощью комментариев /* */, и наоборот.

Соседние файлы в папке ТЕКСТЫ для лабработы 3