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

如何使用宏在释放模式下重新定义函数? 使用C++,我需要一个宏,它将替换一个函数,如果它在发布模式下运行,则什么也不做。因此,在调试模式下将执行该函数,但在发布模式下不会执行,c++,visual-c++,macros,C++,Visual C++,Macros,大概是这样的: 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);

大概是这样的:

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\u TT\u TICK\u ROUND&roundType)
{
#ifndef\u调试
如果(!CurrentSeries)
{
抛出TTTick::Ex(TTTick::SeriesNull);
}

否则如果(CurrentSeries->precision为什么不能对.cpp文件中的函数定义本身执行此操作?foo是在其他地方声明的类的静态成员函数吗?神秘-我得到一个无对象文件生成的错误H3nr1x-不,它仅在该类中声明如果他可以更改函数,他不妨将条件编译放入其中它的实现,以及跳过函数风格宏引入的所有问题。是的,我不能更改函数或其名称,只是希望它在不调试时基本上跳过函数调用。要优化代码,这不起作用,因为我收到一个错误,没有对象文件generated@user1513555对我来说工作很好。可能是别的什么原因问:你能把代码贴在你使用它的地方吗?贴在原始的帖子里,我想可能是因为数据类型实际上不是整数吧?@Bullsfan127是
AEnum\u TT\u TICK\u ROUND
一个枚举?是的,它是一个编译时敏捷枚举
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
}
static void foo_(int, int);

#ifdef NDEBUG
#define foo(x,y)
#else
#define foo(x,y)   foo_(x,y)
#endif
static void foo(int,int); // declaration



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