C语言的可变参数函数主要用到了一个类型va_list
和三个宏——va_start
、va_arg
和va_end
。
本文转载自:
- C语言实现可变参数函数
- 深入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); }
|