在C / C参数可变型函数和参数分配++ [英] Variadic functions and arguments assignment in C/C++
本文介绍了在C / C参数可变型函数和参数分配++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在想,如果在C / C ++语言,可以传递参数以键值的形式运作。
例如,在Python中,你可以这样做:
I was wondering if in C/C++ language it is possible to pass arguments to function in key-value form. For example in python you can do:
def some_function(arg0 = "default_value", arg1):
# (...)
value1 = "passed_value"
some_function(arg1 = value1)
那么在C替代code可能是这样的:
So the alternative code in C could look like this:
void some_function(char *arg0 = "default_value", char *arg1)
{
;
}
int main()
{
char *value1 = "passed_value";
some_function(arg1 = value1);
return(0);
}
因此,参数在some_function使用将是:
So the arguments to use in some_function would be:
为arg0 =DEFAULT_VALUE
arg0 = "default_value"
ARG1 =passed_value
arg1 = "passed_value"
任何想法?
推荐答案
下面是一个C99的解决方案使用复合文字和复杂的宏:
Here's a C99 solution using compound literals and variadic macros:
#include <stdio.h>
#define some_func(...) some_func_((struct some_func_args_){ __VA_ARGS__ })
struct some_func_args_
{
const char *arg1;
const char *arg2;
};
static void some_func_(struct some_func_args_ args)
{
if(!args.arg1) args.arg1 = "default";
printf("---\narg1 = %s\narg2 = %s\n", args.arg1, args.arg2);
}
int main(void)
{
some_func("foo", "bar");
some_func(.arg1 = "spam");
some_func(.arg2 = "eggs");
return 0;
}
这篇关于在C / C参数可变型函数和参数分配++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文