Я могу сделать это в Visual C ++ 2008 с установкой Release (NDEBUG):
debug.h
#ifdef _DEBUG
void debug_printf(const char* format, ...);
#else
#define debug_printf(format, v) __noop
#endif
debug.cpp
#include "stdafx.h" //#include "debug.h" is inside it
void debug_printf(const char* format, ...) {
//so much work here
}
но больше не в Visual C ++ 2013, я получу ошибку компиляции в файле debug.cpp. Кажется, я должен изменить определяющую стратегию в debug.h. Но мне интересно, есть ли настройка компилятора для повторного включения по-старому?
Используйте макрос и в первом случае, и позвольте ему вызывать реальную функцию (которая называется чем-то отличным от макроса).
А во втором случае просто пустое тело макроса.
использование вариационные макросы.
Что-то вроде
#ifdef _DEBUG
# define debug_printf(fmt, ...) real_debug_printf(fmt, __VA_ARGS__)
#else
# define debug_printf(fmt, ...)
#endif
когда _DEBUG
не определяется, то макрос debug_printf
заменяется ничем (точнее, пустой строкой).