gpt4 book ai didi

C 难题...如何将可变参数传递给宏?

转载 作者:太空狗 更新时间:2023-10-29 14:53:36 27 4
gpt4 key购买 nike

我卡在这里了...

#include <stdio.h>

#define DBG_LVL(lvl, stmt) \
do{ \
if(lvl>1) printf stmt; \
}while(0)

#define DBG_INFO(stmt) DBG_LVL(1, stmt)
#define DBG_ERROR(stmt) DBG_LVL(2, stmt)


int main()
{
DBG_INFO(("hello, %s!\n", "world"));
DBG_ERROR(("crazy, %s!\n", "world"));
return 0;
}

如您所见,上面的代码使用“DBG_INFO”或“DBG_ERROR”等宏来控制调试信息级别。

现在由于某些原因,我必须用新函数替换 DBG_LVL()

void myprint(int lvl, const char * format, ...);

唯一的区别是调试级别作为它的第一个参数。我在想:

#define DBG_LVL(lvl, stmt) myprint(lvl, stmt)

当然失败了,因为“stmt”表达式包含括号。然后我用谷歌搜索试图找到一种方法来去除括号,似乎没有什么可以帮助的。我也尝试了一些技巧来将参数传递给“stmt”,但还是失败了……:(

你能帮帮我吗?

最佳答案

# define EXPAND_ARGS(...) __VA_ARGS__
# define DBG_LVL(lvl, stmt) myprint(lvl, EXPAND_ARGS stmt);

关于C 难题...如何将可变参数传递给宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211538/

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