Здравствуйте Кодт, Вы писали:
К>Здравствуйте McSeem2, Вы писали:
MS>>Что-то мне это не нравится с одной стороны. С другой стороны — красиво. Не нравится тем, что при использовании DEBUG_ONLY в release версии все равно будет присутствовать мертвый код, и будет jmp для его обхода — и не надо надеяться на оптимизатор!
К>Почему?
Потому что

Практика показывает, что на него никогда не надо надеяться. И уж тем более на то, что этот код будет выкинут. Впрочем, для определенных, некритических случаев это не важно.
Но скажем, release версия вообще не использует CRT ни под каким видом. Так при данном способе, что-то сомнительно, чтобы компилятор решился выкинуть такой код, который вызывает fprintf, черта лысого и сбоку бантик. И чтобы линкер этот код не прилинковал
К>К сожалению, С++ не позволяет делать мета-макросы, вида
К>К>#define BEGIN_DEBUG { #ifdef DEBUG
К>#define END_DEBUG #endif }
К>
К>(хотя, может быть, в C99 уже есть что-то такое?)
В C вообще препроцессор убогий, что довольно странно. Веди ноги-то растут из PDP-7 (если не ошибаюсь), на котором уже в те времена был весьма развитой макро-ассемблер. Ключевое слово здесь "макро". В общем, можно было бы и перенять опыт для развитого препроцессора.
McSeem