C语言变长参数表

C语言变长参数表

标签(空格分隔): ANSI C 变长参数 标准输出


声明格式,如printf函数:

int printf(char *fmt, ...)

其中,省略号表示参数表中的参数的数量和类型是可变的。**注意:省略号只能出现在参数表的尾部,即函数的声明中必须至少有一个显式声明的参数,如printf中的char *fmt参数。

变长参数表的使用(处理)

  1. #include <stdarg.h>
  2. va_list类型,va_start,va_argva_end

stdarg.h头文件

标准头文件<stdarg.h>中包含一组宏定义(即上述va_宏),它们对如何遍历参数表进行了定义。虽然该头文件的实现在不同的机器上的实现不同,但提供的接口是一致的。

va_listva_start

va_list是指针类型名,用于声明一个变量,该变量将依次引用各参数。由va_start将该变量初始化为指向第一个无名参数的指针。**注意:在使用va_list声明的变量之前,必须调用一次宏va_start。如:

va_list ap;
va_start(ap, fmt); /* 将ap指向fmt后的第一个无名参数 */
va_arg

每次调用va_arg,该宏都会返回一个参数,并将ap(va_list ap;)指向下一个参数。va_arg要求传入一个类型名来决定返回的对象类型、指针移动的步长。如:

int ival;

switch(*p++) {
case 'd':
    ival = va_arg(ap, int);
    break;
}
va_end

va_end负责完成一些必要的清理工作,必须在函数返回前调用。如:

va_end(ap);

公众号
更多好玩的内容请关注我的公众号~会介绍一些 linux 上的效率工具,C 语言, linux 咨询以及 linux 内核源码学习。

参考文献

《C程序设计语言》(第二版)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值