Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КРАТКИЙ ОБЗОР С.doc
Скачиваний:
1
Добавлен:
26.10.2018
Размер:
2.11 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       Все права сохранены       **************************************/       Правильно подобранные и хорошо составленные комментарии играют в       программе важную роль. Написать хорошие комментарии не менее       трудно, чем саму программу, и это - искусство, в котором стоит       совершенствоваться.       Заметим, что если в функции используются только комментарии       вида //, то любую ее часть можно сделать комментарием с помощью       /* */, и наоборот.