C语言的可变参数函数主要用到了一个类型va_list和三个宏——va_startva_argva_end

本文转载自:

  1. C语言实现可变参数函数
  2. 深入C语言可变参数

1. 什么是可变参数

在C语言编程中有时会遇到一些参数个数可变的函数,例如printf(),scanf()函数,其函数原型为:

1
2
int printf(const char* format,…)
int scanf(const char *format,…)

它除了有一个参数format固定以外,后面跟着的参数的个数和类型是可变的(用三个点“…”做参数占位符)

2. 简单的可变参数例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdarg.h>

void print_args(int count, ...);

int main (int argc, char* argv[]) {
print_args(5,1,2,3,4,5);
return 0;
}

void print_args(int count, ...) {
int i, value;
va_list arg_ptr;
va_start(arg_ptr, count);
for(i=0; i<count; i++) {
value = va_arg(arg_ptr,int);
printf("position %d = %d\n", i+1, value);
}
va_end(arg_ptr);
}