如何使用宏在发布模式下重新定义函数?

时间:2012-07-10 03:16:56

标签: c++ visual-c++ macros

使用C ++,我需要一个宏来替换一个函数,如果它在发布模式下运行,它就什么也不做。因此,在调试模式下,该函数将被执行,但在释放模式下它将不会执行。

这样的事情:

static void foo(int,int)

#ifdef NDEBUG
#define foo(x,y)
#endif

...并且函数体在一个单独的.cpp文件中定义,并且是一个类的一部分,这就是为什么我认为这不起作用?

实际代码..

static void ValidateInput(const SeriesID *CurrentSeries, const AEnum_TT_TICK_ROUND& roundType = TT_TICK_ROUND_NONE);

的.cpp

void TTBaseTick::ValidateInput(const SeriesID *CurrentSeries, const AEnum_TT_TICK_ROUND& roundType)
{
#ifndef _DEBUG
if (!CurrentSeries)
{
  throw TTTick::Ex(TTTick::SeriesNull);
}
else if (CurrentSeries->precision <= 0)
{
    throw TTTick::Ex(TTTick::PrecisionInvalid);
}
else if(!roundType.IsValidValue(roundType))
{
    throw TTTick::Ex(TTTick::InvalidParam);
}
#endif
}

2 个答案:

答案 0 :(得分:5)

static void foo(int,int); // declaration



// Definition in your cpp file.
void foo( int x, int y )
{
#ifndef NDEBUG
    // Code for debug mode
#endif
}

答案 1 :(得分:4)

static void foo_(int, int);

#ifdef NDEBUG
#define foo(x,y)
#else
#define foo(x,y)   foo_(x,y)
#endif