void f(...)
{
}
//我们知道这样定义过后函数可以无限参数个数调用
f(1);f(1,2);f(1,2,3);f(1,2,3,4);
//但问题是我想运行过程中才决定到底要传几个参数;
//就像类似的
printf("%s%s%s", "a","b","c");
//当用户输入参数个数后,可以分别把各个各参数传给printf;或者用户自定义一个字符串格式;
//比如printf第一个参数,由用户自己运行时指定,后面的详细参数也由用户指定,就类似于脚本语句中的
//eval('func(1,1,3,4)');这样的效果。
//我想过用汇编来计算参数个数,然后再push每一个参数,但我很无助的怕堆栈不好恢复。
8 个解决方案
使用宏va_start,va_list,建议到网上搜搜printf的实现,作为参考。
不知道是我没说清楚,还是你们误解了我的意思
va_start,va_list这些东西不是在解析参数时用的么
我现在需要的是传递参数时不能硬编码
假如我现在这样调用 f(1,2,3,4,5);这样的代码就写死了,参数是5个固定了,
我需要的效果是运行时 f(1,2),f(1,2,3),f(1,2,3,4,5)这样的形式不固定,要运行时决定参数个数,
至少f函数内部的写法我不关心,我只关心如何去动态的传递给f多个参数,不同情况传不同个数的参数.
要这么复杂么
f(int * ptr, size_t num)
楼上的不要以为我想得复杂,你只知其一不知其二啊.
首先函数 f(const char*, ...);这样的原型固定了,我无法改变;
我现在需要实现的是,参数个数在运行时决定,而且类型不一定是int型,所以你写成(int*,size_t)不靠谱
现在不是我写所有代码,我得调用其它的代码,人家指定了一个接口,至于调用是我的事,所以我想搞清楚
运行时能不能决定参数,而不是在写代码时就把函数参数写死了。
C++还有模板呢。
另外,自己google“提问的智慧” 并认真学习。
你用错误的解来替代原始需求,只能浪费自己更多的时间和精力。
f(char *fmt,va_list)
第一个是你的字符串,第二个是参数列表
调用的时候可以是变参数的。