C语言中的可变参数

来源:互联网 发布:决战紫禁之巅 知乎 编辑:程序博客网 时间:2024/06/12 21:35

1.包含头文件 :<stdarg.h>,它声明了一种类型,并定义了(C89)几个宏:va_start, va_arg和va_end。C99中还增加了一个类似函数的宏va_copy。

2.要想获取可变参数。必须声明va_list类型的变量来接收可变参数。

    va_list ap;

    然后将这个“指针”指针到开头。即第一个可变参数:va_start(ap, n);这里的n为可变参数列表中的第一个参数的名字。

   要想获取下一个可变参数,即可用:va_arg(ap, int)来获取,第二个参数为可变参数的类型,这个位置“指针”会自动向前到下一个参数处。

   在函数返回之前,要求用语句va_end(ap);进行“清理”。(如果不返回,函数可以调用va_start并且再次遍历参数列表);


举个实际的例子:编写一个可变的参数列表的函数,求其最大值:

#include <stdio.h>#include <stdlib.h>#include <stdarg.h>int max_int(int n, ...);int main(void){    int largest = max_int(1, 8, 2, 6, 4, 10, -1);    printf("max is %d\n", largest);exit(EXIT_SUCCESS);}int max_int(int n, ...){    va_list ap;    int i;    int current;    int largest;    va_start(ap, n);    largest = n;    //这里判断!=-1,所以,在调用时,必须要以-1为结尾。呵呵。    while ( (current = va_arg(ap, int)) !=-1)    {        if ( current > largest )        {            largest = current;        }    }    va_end( ap );    return largest;}

如果没有出现什么问题的话,会打印出: