非常教程

C参考手册

变量函数 | Variadic functions

Variadic functions

变量函数是一些函数(例如printf),其中需要可变数量的参数。

可变参数函数的声明使用省略号作为最后一个参数,例如 int printf(const char * format,...);. 有关语法和自动参数转换的更多详细信息,请参阅可变参数。

从函数体访问可变参数使用以下库工具:

| 宏|

|:----|

| 在头文件<stdarg.h>中定义 |

| va_start | 允许访问可变参数函数参数(函数宏)|

| va_arg | 访问下一个可变参数函数参数(函数宏)|

| va_copy(C99)| 制作可变参数函数参数(函数宏)|的副本

| va_end | 结束可变参数函数参数(函数宏)|的遍历

| 类型|

| va_list | 保存va_start,va_arg,va_end和va_copy(typedef)所需的信息|

打印不同类型的值。

#include <stdio.h>
#include <stdarg.h>
 
void simple_printf(const char* fmt, ...)
{
    va_list args;
    va_start(args, fmt);
 
    while (*fmt != '\0') {
        if (*fmt == 'd') {
            int i = va_arg(args, int);
            printf("%d\n", i);
        } else if (*fmt == 'c') {
            // note automatic conversion to integral type
            int c = va_arg(args, int);
            printf("%c\n", c);
        } else if (*fmt == 'f') {
            double d = va_arg(args, double);
            printf("%f\n", d);
        }
        ++fmt;
    }
 
    va_end(args);
}
 
int main(void)
{
    simple_printf("dcff", 3, 'a', 1.999, 42.5); 
}

输出:

3
a
1.999000
42.50000

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.16变量参数<stdarg.h>(p:269-272)
  • C99标准(ISO / IEC 9899:1999):
    • 7.15变量参数<stdarg.h>(p:249-252)
  • C89 / C90标准(ISO / IEC 9899:1990):
    • 4.8变量<stdarg.h>

扩展内容

| 用于Variadic函数的C ++文档 |

|:----|

变量函数 | Variadic functions相关

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。