88 Часть II. Программирование на C++

h00881.jpg

/ / ERROR.СРР — демонстрирует директиву препроцессора #error

#ifndef _ERROR_H

#error Обнаружена семантическая ошибка

#endif

void main(){}

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

Этот пример демонстрирует исключительно синтаксис директивы, а не ее практическое использование; вы сами по своему разумению должны найти этому приему достойное применение. Чтобы увидеть, как его используют разработчики Borland, просмотрите заголовки, в каталоге \Bc5\Include; один из примеров вы найдете в varargs.h: там директива tterror помогает избежать включения заголовков с похожими, но несовместимыми объявлениями.

Применение препроцессора с максимальной пользой

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

Мнимый рост мастерства

Новички в программировании, озабоченные вылавливанием ошибок, щедро оснащают свои программы отладочными операторами. После чего, отладив программу и исправив найденные ошибки, они выбрасывают отладочный код из программы.

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

Конечно, расставлять комментарии проще, чем вырезать целые куски текста, но это не спасает очень многие программы от замусоривания отладочными операторами (просто потому, что их забыли закомментировать); становится ясно, что нужно искать лучшие пути.