Я не рекомендую использовать макрос типа DEBUG_IF по причине, указанной Келли.
DEBUG_IF(x)
{
// debugging code
}
else
{
// release code (should be executed for both debug and release)
}
Видите логическую ошибку здесь? Код релиза всегда должен выполняться, если только он не является кодом релиза, но сделать это было бы довольно легко с помощью макроса DEBUG_IF. Это может быть неприятно, чтобы написать это, но я думаю, что это самый ясный и наименее запутанный способ. Если вы используете его, я рекомендую избегать его полностью.
То же самое верно для макроса DEBUG_CONDITION.
if (DEBUG_CONDITION(x) )
{
// debugging code
}
else
{
// oops, this never gets executed in debug builds
}
Код только для выпуска очень редок в отличие от кода только для отладки, поэтому такие случаи обычно являются логическими ошибками. Когда я начал использовать C ++, я хотел все записать, но я многому научился, особенно благодаря работе с командой, что лучше написать ее по назначению. Стремитесь к достижению краткости в логике, но вы должны быть осторожны, чтобы не пересекать черту, в которой сокращение кода переходит в границы обфускации.
Идея отладки крупномасштабной системы, заполненной такими макросами DEBUG_IF / DEBUG_CONDITION, как эта, вызывает у меня головную боль расщепления.