一种将可选参数传递给函数的方法

时间:2019-09-08 01:52:25

标签: c

执行以下功能:

char * new_string = slice("old string", 3, 5)

我可以这样称呼它:

char * new_string = slice("old string", 3, NULL)
// NULL means ignore the  `end` parameter and just go all the way to the end.

在C语言中是否有一种方法可以“忽略”参数?例如,传递如下内容:

response = requests.post('https://www.com', headers=tmp, data=data).json()
            x = json.dumps(response, ensure_ascii=False)
            print x['aaa']

该怎么做?还是用C做不到?

2 个答案:

答案 0 :(得分:1)

可选参数(或具有默认值的参数)在C语言中并不是真正的东西。我认为您可以通过传入'NULL'来获得正确的主意,除了NULL等于0并将其解释为整数。相反,我建议将参数更改为有符号整数,而不是无符号整数,并传入-1作为标志,以指示应忽略该参数。

答案 1 :(得分:0)

只有两种方法可以在C中传递可选参数,并且只有一种是常见的。要么传递一个指向可选参数的指针,然后将NULL理解为未传递,要么将超出范围的值传递为未传递。

方法1:

tab

方法2:

09

顺便说一句,这个示例实际上应该使用char * slice(const char * str, const unsigned int *start, const unsigned int *end); // ... const unsigned int three = 3; char * new_string = slice("old string", &three, NULL) #include <limits.h> char * slice(const char * str, const unsigned int start, const unsigned int end); char * new_string = slice("old string", 3, UINT_MAX); ,但是我复制了您的原型。

建议的dupe目标正在谈论vardiac函数,该函数确实具有可选参数,但与您的要求不同。在这样的函数调用中,总是有可能通过查看前面的参数来确定该参数是否存在(预期存在)。在这种情况下,那根本没有帮助。