当前位置: C语言 -- 标准库 -- <stdarg.h> -- va_list

va_list类型


描述:

该类型是一个完整对象类型,适合保存宏va_startva_argva_endva_copy所需信息。如果需要访问不同参数,被调用函数应声明一个va_list类型对象,在ISO/IEC 9899:2018标准第7.16 Variable arguments <stdarg.h>节中该对象通常称为ap。对象ap可以作为参数传递给另一个函数;如果该函数使用参数ap调用宏va_arg,则调用函数中ap的值是不确定的,应在进一步引用ap前将其传递给宏va_endISO/IEC 9899:2018标准允许创建指向va_list类型对象的指针,并可以将该指针传递给另一个函数,这种情况下,原始函数可以在其它函数返回后进一步使用原始参数列表。)。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
/*类型va_list范例*/

#include <stdarg.h>
#include <stdio.h>

void studentName(const char *className, ...)
{
    char *str;
    va_list student;
    int i = 0;

    va_start(student, className);
    
    /*读取参数,直至遇到空指针。*/
    while((str=va_arg(student, char*)) != NULL)
    {
        ++i;
        if(i%4)
            printf("%-20s", str);
        else
            printf("%-20s\n", str);
    }

    va_end(student);
}

int main(void)
{
    const char className[] = "Chinese Class";

    puts(className);

    studentName(className, "Geng bijun", "Zhang feng",
                "Liu xiangyang", "Li jun", "Song xianwen",
                "Zhang xueyou", "Ma dehua", "Song ziweng",
                "Wei zhuang", "Han feizi",NULL);

    return 0;
}


输出:
Chinese Class
Geng bijun Zhang feng Liu xiangyang Li jun
Song xianwen Zhang xueyou Ma dehua Song ziweng
Wei zhuang Han feizi

相关内容:
va_arg 获取下一个参数的宏。
va_copy 复制可变参数列表的宏。
va_end 结束使用可变参数列表的宏。
va_start 初始化可变参数列表的宏。