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++ замены, приветствуемые большинством (но некоторыми отвергаемые).