C程序设计语言

C语言变长参数表

Posted by Persuez on March 22, 2018

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);

参考文献

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