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

va_end宏


概要:
#include <stdarg.h>
void va_end(va_list ap);

描述:

va_end是宏还是具有外部链接的标识符,ISO/IEC 9899:2018标准未作明确说明。如果为了访问实际函数而禁止宏va_end定义,或者程序定义了名为va_end的外部标识符,其行为是未定义的。

va_end有助于从函数中正常返回,函数的可变参数列表已通过宏va_start或者宏va_copy初始化。宏va_end可以修改参数ap,使其不再可用。如果没有调用对应的宏va_start或者宏va_copy,或者在具有可变参数列表的函数返回前没有调用宏va_end,则行为是未定义的。同一函数中宏va_start和宏va_copy的每次调用都应与对应的va_end宏调用相匹配。


参数:
va_list ap

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 
/*宏va_end范例*/

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

void printData(const char *format, ...)
{
    va_list data;

    va_start(data, format);

    while(*format)
    {
        if(*format=='c')
            printf("%c\n", va_arg(data,int));
        if(*format=='d')
            printf("%d\n", va_arg(data,int));
        if(*format=='f')
            printf("%f\n", va_arg(data,double));
        if(*format=='s')
            printf("%s\n", va_arg(data,char*));

        ++format;
    }

    va_end(data);
}

int main(void)
{
    printData("dfcs", 256,3.14,'A',"China");

    return 0;
}

输出:

256

3.140000

A

China


相关内容:
va_list 保存可变参数信息的类型。
va_arg 获取下一个参数的宏。
va_copy 复制可变参数列表的宏。
va_start 初始化可变参数列表的宏。