лезные советы и приемы, примен

Автор admin Пятница, 8 мая 2009 11:32

лезные советы и приемы, применяемые в процессе отладки. Трассировочные макросы Иногда бывает удобно выводить код каждой выполняемой команды в поток cout или в трассировочный файл. Вот как выглядит препроцессорный макрос для решения этой задачи: #define TRACE(ARG) cout « #ARG « endl: ARG 82 Глава 2 • Защитное программирование Остается лишь заключить трассируемые команды в этот макрос. Впрочем, при этом могут возникнуть проблемы. Для примера возьмем следующий цикл: for(int i = 0; i < 100; i++) cout « i « endl; Каждая строка заключается в макрос TRACE(): TRACE(for(int i = 0; i < 100: i++)) TRACE( cout « i « endl): После расширения будет получен следующий результат: cout « “for(int i = 0: i < 100; i++)” « endl; for(int i = 0; i < 100; i++) cout « “cout « i « endl;” « endl: cout « i « endl: He совсем то, что требовалось. А значит, при использовании этого приема необходима осторожность. Ниже приведена другая разновидность макроса TRACE: #define D(a) cout « #a “=[" « a « "]” « endl; При вызове макроса D передается выражение, которое требуется вывести. Макрос выводит это выражение, а за ним — вычисленное зн


Комментарии закрыты.