如何在发布模式下使用宏重新定义函数?
Posted
技术标签:
【中文标题】如何在发布模式下使用宏重新定义函数?【英文标题】:How do I use a macro to redefine a function in release mode? 【发布时间】:2012-07-10 03:16:55 【问题描述】:使用 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
【问题讨论】:
为什么不能对 .cpp 文件中的函数定义本身这样做? foo 是在其他地方声明的类的静态成员函数吗? 神秘 - 我得到一个没有生成目标文件的错误 H3nr1x - 不,它只在这个类中声明 【参考方案1】:static void foo(int,int); // declaration
// Definition in your cpp file.
void foo( int x, int y )
#ifndef NDEBUG
// Code for debug mode
#endif
【讨论】:
这不起作用,因为我得到一个错误,没有生成目标文件 @user1513555 对我来说工作正常。可能是其他问题。你能把代码贴在你使用它的地方吗? 发表在原帖中,我想可能是因为数据类型实际上不是整数? @Bullsfan127AEnum_TT_TICK_ROUND
是枚举吗?
是的,它是一个编译时敏捷枚举【参考方案2】:
static void foo_(int, int);
#ifdef NDEBUG
#define foo(x,y)
#else
#define foo(x,y) foo_(x,y)
#endif
【讨论】:
如果他能改变函数,他还不如把条件编译放在它的实现中,跳过所有引入的函数式宏的问题。 是的,我不能更改函数或其名称,只是希望它在不调试时基本跳过函数调用。优化代码以上是关于如何在发布模式下使用宏重新定义函数?的主要内容,如果未能解决你的问题,请参考以下文章