如何填充va_list

时间:2013-06-01 12:41:45

标签: c io variadic

我无法找到我的“问题”的答案。

我创建了一个函数,它接受不同数量的整数('findMinVal(int x,...)')并返回所有调用中的最小数字。现在我的程序直接通过代码获取参数:

int main(){

printf("\nThe minimal number in each call for \"findMin\" is : \n");


findMinVal(90,78,5,20,-1);
findMinVal(70,40,2,-1);
findMinVal(40,30,-1);

return 0;

}/* main */

我希望它接受文件中的变量,但我不知道我怎么能这样做..? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

制作可变参数列表的唯一标准方法是调用接受它的函数,一次传递所有参数。

findMinValInArray(int n, int a[]) {
    switch(n) {
        case 1: return findMinVal(a[0], -1);
        case 2: return findMinVal(a[0], a[1], -1);
        case 3: return findMinVal(a[0], a[1], a[2], -1);
        case 4: return findMinVal(a[0], a[1], a[2], a[3], -1);
        case 5: return findMinVal(a[0], a[1], a[2], a[3], a[4], -1);
        case 6: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], -1);
        case 7: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], -1);
        case 8: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], -1);
        case 9: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 
            a[8], -1);
        case 0xA: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
            a[8], a[9], -1);
        case 0xB: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
            a[8], a[9], a[0xA], -1);
        case 0xC: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
            a[8], a[9], a[0xA], a[0xB], -1);
        case 0xD: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
            a[8], a[9], a[0xA], a[0xB], a[0xC], -1);
        case 0xE: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
            a[8], a[9], a[0xA], a[0xB], a[0xC], a[0xD], -1);
    }
}

如果可能的话,应该避免使用varargs。

答案 1 :(得分:0)

虽然您可以使用Vovanium所描述的varargs,但更改findMinVal函数以接受数组会更好。例如:

int findMinVal(size_t length, int * values){
    /* Find minimum value... 
       (Hint: start with min = values[0] and the loop iterator with 1) */
}

然后这样称呼:

/* allocate values and fill it */
int min = findMinVal(length, values);