gpt4 book ai didi

c++ - 防止代码处理的宏

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:48:32 26 4
gpt4 key购买 nike

所以我有一段代码,如果它处于 Debug模式,它将访问一个 DLL 命名空间函数,如果它处于 Release模式,我想注释掉它。

#ifdef DEBUG
#define (DEBUG_CODE) abcd::
#else
#define (DEBUG_CODE) <Condition to skip processing>


if (some condition)
(DEBUG_CODE) func_name();

虽然我希望 #else 定义注释,但我想你不能那样做,因为它们在任何代码处理或执行预处理之前被编译器跳过。

如果那是正确的,请告诉我一种跳过 (DEBUG_CODE) func_name(); 处理的方法。用到的地方很多,我不想到处加if(DEBUG)

编辑

命名空间 DLL 具有不返回任何内容的函数,以及预期返回值并可能分配给 enum 的函数。

 abcd::func_name();
and
int rs = abcd::func_name_2();
and
enum XYZ{ var1 = 0; var2};
XYZ PQR = abcd::func_name3(); //This Enum will prevent me from defining some kind
// 0; as a `#define`

所以..多个场景..

感谢您的帮助。

最佳答案

如果将 DEBUG_CODE 更改为

,则可以执行此操作
    #ifdef DEBUG
# define DEBUG_CODE(code) abcd::code;
#else
# define DEBUG_CODE(code) ;
#endif

然后你会这样调用它:

    if(some_condition) DEBUG_CODE(func_name())

在 Debug模式下,这会调用您的函数,而在 Release模式下,不会生成任何代码。

如果你希望能够将这些函数的返回值分配给变量或从它们返回(尽管我认为这不是一个好主意,正如我在评论中解释的那样)我会让宏采取什么在 Debug模式下调用以及在 Release模式下使用什么。

    #ifdef DEBUG
# define IF_DEBUG_ELSE(debug_code, release_code) abcd::debug_code
#else
# define IF_DEBUG_ELSE(debug_code, release_code) release_code
#endif

这至少在您调用宏时可以清楚地知道发生了什么。
这可以像这样使用:

    return IF_DEBUG_ELSE(check_result(), 0);//0 for success
if(IF_DEBUG_ELSE(check_condition(), true)){}
XYZ xyz = IF_DEBUG_ELSE(get_xyz(), First_XYZ);

等等。

关于c++ - 防止代码处理的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19160459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com