gpt4 book ai didi

c - 在 c 中制作调试打印宏时出错

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:18 26 4
gpt4 key购买 nike

代码如下,

#define print_err(fmt, ...) \
do { if (DEBUG_ERR) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \
__LINE__, __func__, ##__VA_ARGS__); } while (0)

如果没有定义 DEBUG_ERR 宏,我会收到错误消息。编译是使用 gcc 5.4.0 完成的。如果定义了宏DEBUG_ERR就没有问题。

include/tmp.h:54:18: error: ‘DEBUG_ERR’ undeclared (first use in this function)
do { if (DEBUG_ERR) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \*

最佳答案

宏中的 if 指令是 C 指令,而不是预处理器指令(不能嵌套预处理器指令)

因此即使不能激活调试,DEBUG_ERR 也必须 被定义。将其设置为 0,希望编译器能够优化您的语句。

您可以做的是在外部测试 DEBUG_ERR 宏,如果未定义则定义空宏:

#ifdef DEBUG_ERR
#define print_err(fmt, ...) \ do { fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ __LINE__, __func__, ##__VA_ARGS__); } while (0)
#else
#define print_err(fmt, ...) do {} while(0)
#endif

关于c - 在 c 中制作调试打印宏时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45453291/

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