C variadic函数

一 定义
  • variadic函数,即可变参数函数,是例如printf这样需要可变数量参数的函数。函数声明使用…作为最后一个参数,且至少之前有一个命名参数(自C89,K&R C 不支持)。
二 访问
  1. 在函数体中访问可变参数需要stdarg.h中的工具,具体如下:
  • va_start:允许访问可变参数函数参数(函数宏)
  • va_arg:访问下一个可变参数函数参数(函数宏)
  • va_copy(C99):制作可变参数函数参数(函数宏)的副本
  • va_end: 结束可变参数函数参数(函数宏)的遍历
  • va_list:保存va_start,va_arg,va_end和va_copy(typedef)所需的信息
三 使用
  1. 使用vprintf打印到控制台

    使用参数列表发送格式化输出到标准输出 stdout
    int vprintf(const char *format, va_list arg)

    void print(const char* format, ...) {
      va_list ap;
      va_start(ap, format);
      vprintf(format, ap);
      va_end(ap);
    }
    
  2. 使用vfprintf打印到文件

    使用参数列表发送格式化输出到流 stream 中
    int vfprintf(FILE *stream, const char *format, va_list arg)

    void print_file(const char* format, ...) {
      va_list ap;
      va_start(ap, format);
      FILE* fp;
      fp = fopen("./file.txt", "w");
      if (fp)
        vfprintf(fp, format, ap);
      va_end(ap);
    
      if (fp)
        fclose(fp);
    }
    
  3. va_copy和va_arg的使用

    void print_int(int count, ...) {
      va_list ap;
      va_list ap1;
      va_start(ap, count);
      va_copy(ap1, ap);
      int i = 0;
      while (i < count) {
        printf("%d", va_arg(ap, int));
        ++i;
      }
      va_end(ap);
    
      i = 0;
      while (i < count) {
        printf("%d", va_arg(ap, int));
        ++i;
      }
    }
    
四 参考
  1. variadic functions
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值