我有一个函数接受3个参数,但是我也希望它只接受前两个而不关心第三个参数。我怎样才能做到这一点我试着只是在头文件中声明函数为void list()
认为这可能意味着我们不关心有多少参数,但这不起作用。如何允许传递给函数的可变参数
void list(uint8_t _pin, unsigned int time, unsigned long tasks)
我有一个函数接受3个参数,但是我也希望它只接受前两个而不关心第三个参数。我怎样才能做到这一点我试着只是在头文件中声明函数为void list()
认为这可能意味着我们不关心有多少参数,但这不起作用。如何允许传递给函数的可变参数
void list(uint8_t _pin, unsigned int time, unsigned long tasks)
你想要什么叫做Variadic function。它可以接受可变数量的参数。
**著名的例子:printf()
/scanf()
这些功能包含省略号(…
)在参数列表中的符号,并使用特定的宏访问可变参数。
最基本的想法是编写一个接受可变数量参数的函数。所以,它必须用一个原型来声明。
ISO C的语法在…
之前至少需要一个固定参数。因此,我们像往常一样编写固定参数,然后在参数列表末尾添加notain,以指示其他参数的可能性。例如,
int func (const char *a, int b, …)
{
…
}
定义了一个函数func()
它返回一个int
和需要两个参数,一个const char *
和int
。其后是任意数量的匿名参数。
您可以查看On-line GNU manual了解更多详情。
这里是在这里解释的一个把戏:C default arguments。 可以使第三个参数作为默认的函数声明如下:
typedef struct {
uint8_t _pin;
unsigned int time;
unsigned long tasks;
} f_args;
double var_f(f_args in){
uint8_t _pin = in._pin? in._pin : 8;
unsigned int time = in.time ? in.time : 3;
unsigned long tasks =in.tasks? in.taska : 0;
return f_base(i_out, x_out);
return list(_pin, time, tasks);
}
#define list(...) var_f((f_args){__VA_ARGS__});
所以,你可以打电话给你的功能如下:
list(2,5);
不同的解决问题的方法没有可变参数是做什么像这样:
void list(int argc, char **argv);
你有两个参数总是,但是什么样的变化是的argv内容,什么是它里面的数。您可能在其他C程序的入口点(main函数)中看到了这一点。参数argc,参数count和argv参数向量给出了你所需要的数量和值。
内。然后列表,你可以这样做:
if (argc == 2)
do_something;
else if(argc == 3)
do_something_else;
else
whatever;
看一看了'stdarg.h'头。 – fuz
函数如何知道是否查看第三个参数? – immibis
你可以修改函数,它是如何调用的,或者两者兼而有之? – StephenTG