gpt4 book ai didi

c++ - cpp中宏的条件导数用法

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:29 25 4
gpt4 key购买 nike

我有一个问题。在我的一个项目中,我使用 FLAG PRINT 来启用/禁用调试 printfs。目前我正在使用这样的东西。

#ifdef PRINT
printf("DEBUG");
#endif

将#ifdef 放在每个 printf 之前是很痛苦的。所以我想为#ifdef 做一个#define,比如

#define DEBUG_PRINT 
#define PRINT (#ifdef DEBUG_PRINT)
#define ENDPRINT #endif

所以我可以像这样使用

PRINT
printf("DEBUG");
ENDPRINT

但它给出了一个编译器错误。你能告诉我一些简化的方法吗?

谢谢,

最佳答案

一个标准的方法是

#ifdef DEBUG_PRINT
# define is_debug() (1)
#else
# define is_debug() (0)
#endif

#define pr_dbg(fmt, ...) do { \
if (is_debug()) \
printf(fmt, __VA_ARGS__); \
} while (0)

使用gcc时,可以/应该这样写

            printf(fmt, ## __VA_ARGS__);

处理空参数。

在你的代码中你可以这样写

pr_dbg("foo=%u\n", foo);

DEBUG_PRINT 未定义时,优化器将丢弃该表达式,但仍会检查您的调试语句是否存在语法错误。这避免了无声破坏,例如。在 #ifdef 子句中使用 undefined variable 。

关于c++ - cpp中宏的条件导数用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19988815/

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