C语言细节 - 可变参数列表

本文详细介绍了在C语言中如何使用可变参数列表。通过引入标准库中的stdarg.h头文件,文章解释了va_list、va_start、va_arg和va_end四个宏的用法,并提供了使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件引用

为了使用可变参数列表,你需要添加标准库中的 “stdarg.h”

头文件中定义的一个类型和三个宏
va_list
typedef char *va_list;	

va : variable argument


va_start
#define va_start(AP, LASTARG)	(AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))));

功能:使ap指向函数中可变参数的首地址:
__va_rounded_size 是内存对齐宏详见:C语言内存对齐详解3


va_arg
#define va_arg(AP, TYPE) \
   (AP += __va_rounded_size (TYPE),	\
   *((TYPE *) (AP - __va_rounded_size (TYPE))))

功能:1.返回可变参数的当前参数;2.将指针指向下一个参数;所有可变参数类型都设定为TYPE
注:函数无法判断检索到的参数是否是可变参数列的最后一个参数


va_end
#define va_end(ap)      ( ap = (va_list)0 )

注:va_end常与va_start成对使用

使用示例:
#include <stdio.h>
#include <stdarg.h>

void var_test(char *format, ...)
{
    va_list list;
    va_start(list,format);

    char *p;

    while( (p=va_arg(list, char *)) != NULL )
         printf("%s ",p);

     va_end(list);
}

int main()
{
    var_test("","this","is","a","test",NULL);

    return 0;
}

参考文献:C语言中可变参数函数实现原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

|清风|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值