宏定义一个函数,FUNC(...), 在使用时需要 往FUNC中传递多个键值对,其中k为字符串,v为一个函数的返回值,可能是int可能时字符串。这个宏函数该怎么写
时间: 2024-03-05 19:52:30 浏览: 52
Source Insight 自定义快捷键宏函数编写用例
4星 · 用户满意度95%
您可以使用可变参数宏来实现这个功能。以下是一个可能的解决方案:
```c
#define FUNC(...) func(__VA_ARGS__, NULL)
void func(const char* k, ...) {
va_list args;
va_start(args, k);
while (k != NULL) {
const char* v = va_arg(args, const char*);
if (v == NULL) {
break;
}
// 在这里使用 k 和 v 进行相应的操作
// your code here
k = va_arg(args, const char*);
}
va_end(args);
}
```
使用时,您可以像这样调用宏:
```c
FUNC("key1", some_function_return_int(),
"key2", some_function_return_string(),
"key3", another_function_return_int(),
NULL);
```
注意,最后必须传入 NULL 以表示键值对的结束。在宏中,我们首先将所有参数传递给 func() 函数,然后在其中使用 va_list 和 va_arg() 宏来遍历参数列表,直到遇到 NULL。在循环中,我们交替使用 k 和 v 两个参数,以便对它们进行相应的操作。
阅读全文