98 __ ___ ________Часть II. Программирование на C++
//TRAP.CPP — Простая проверка протоколирования хода выполнения // Copyright (с) 1995. All Rights Reserved. // By Paul Kiminel. Okemos, MI USA
// Для использования TRAP не нужно никуда включать этот фрагмент. // Он написан исключительно для проверки этого макроса.
#define TRAP_CODE
#include "trap.h"
void main( int argc, char* argv[]) (
// простая программа, печатающая аргументы командной строки
// в argv[0] передается имя программы
for( int i=0; i<argc; i++)
( . TRAP( cout « argv[i] « endl);
} }
Эта программа запишет в файл аргументы командной строки; содержимое Deleteme.trp будет выглядеть так:
code: cout « argv[i] « endl file: Trap.cpp line#: 17
Целью создания программы Trap.cpp была упрощенная проверка механизма перехвата; чтобы использовать его в своих программах, вам нужно только определить (директивой #define) символическое имя TRAP_CODE и включить в свой модуль заголовок trap.h.
Замена препроцессора
Потенциальная угроза неправильного использования препроцессора вполне реальна. В случаях, где это может быть особенно криминальным, он уже заменен. Но пока систематическая замена функций препроцессора языковыми средствами идет своим чередом, многие его атрибуты вроде директивы #include по-прежнему остаются незаменимыми, не позволяя окончательно от него отказаться. '
Несомненно, отсутствие в любом преемнике препроцессора поддержки директивы #include станет катастрофой практически для всего уже написанного кода. Однако некоторые вещи уже нашли себе в C++ замены, приветствуемые большинством (но некоторыми отвергаемые).