Здравствуйте McSeem2, Вы писали:
MS>Что-то мне это не нравится с одной стороны. С другой стороны — красиво. Не нравится тем, что при использовании DEBUG_ONLY в release версии все равно будет присутствовать мертвый код, и будет jmp для его обхода — и не надо надеяться на оптимизатор!
Почему?
MS>К тому же, будут дополнительные предупреждения компилятора типа "code can never be reached" — я не говорю о MS C++, я говорю о грамотных C++ компиляторах вообще. В общем, у меня противоречивое мнение — "элегантно, но грязно"
В финальном релизе можно повыкидывать код.
Например, определить макросы
#define BEGIN_DEBUG DEBUG_ONLY {
#define END_DEBUG }
...
BEGIN_DEBUG
fprintf(log, "hello,bugs!");
END_DEBUG
а перед выпуском версии повыдирать фрагменты BEGIN_DEBUG — END_DEBUG.
К сожалению, С++ не позволяет делать мета-макросы, вида
#define BEGIN_DEBUG { #ifdef DEBUG
#define END_DEBUG #endif }
(хотя, может быть, в C99 уже есть что-то такое?)