C/C++ 中的可变参数函数和参数赋值 [英] Variadic functions and arguments assignment in C/C++

查看:49
本文介绍了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 中的替代代码可能如下所示:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆