88 Часть II. Программирование на C++
/ / ERROR.СРР — демонстрирует директиву препроцессора #error
#ifndef _ERROR_H
#error Обнаружена семантическая ошибка
#endif
void main(){}
В этом фрагменте совершенно тривиальное приложение вызовет ошибку при компиляции, потому что мы забыли включить туда заголовок модуля.
Этот пример демонстрирует исключительно синтаксис директивы, а не ее практическое использование; вы сами по своему разумению должны найти этому приему достойное применение. Чтобы увидеть, как его используют разработчики Borland, просмотрите заголовки, в каталоге \Bc5\Include; один из примеров вы найдете в varargs.h: там директива tterror помогает избежать включения заголовков с похожими, но несовместимыми объявлениями.
Применение препроцессора с максимальной пользой
Наблюдая за процессом обучения программистов языку C++, можно проследить некоторые общие закономерности эволюционирования техники программирования в зависимости от роста мастерства. Причем становится явно видно, что книги и другие источники вряд ли способны ускорить прогресс в обучении. Так что, как советует народная мудрость, учитесь на ошибках других.
Мнимый рост мастерства
Новички в программировании, озабоченные вылавливанием ошибок, щедро оснащают свои программы отладочными операторами. После чего, отладив программу и исправив найденные ошибки, они выбрасывают отладочный код из программы.
Столкнувшись впоследствии с необходимостью дальнейшей отладки, они начинают осознавать, что вставляя и выкидывая каждый раз отладочный код, они добавляют себе лишнюю работу, и начинают ставить на отладочные операторы комментарии. Очевидно, что усилий на то, чтобы убрать комментарии с отладочного кода, уходит гораздо меньше, чем н^ его переписывание заново.
Конечно, расставлять комментарии проще, чем вырезать целые куски текста, но это не спасает очень многие программы от замусоривания отладочными операторами (просто потому, что их забыли закомментировать); становится ясно, что нужно искать лучшие пути.