如何实现类似printf( const char *format [, argument]... )这种参数不固定的函数
2011-06-27 15:34
495 查看
Example /* VA.C: The program below illustrates passing a variable * number of arguments using the following macros: * va_start va_arg va_end * va_list va_dcl (UNIX only) */ #include <stdio.h> #define ANSI /* Comment out for UNIX version */ #ifdef ANSI /* ANSI compatible version */ #include <stdarg.h> int average( int first, ... ); #else /* UNIX compatible version */ #include <varargs.h> int average( va_list ); #endif void main( void ) { /* Call with 3 integers (-1 is used as terminator). */ printf( "Average is: %d/n", average( 2, 3, 4, -1 ) ); /* Call with 4 integers. */ printf( "Average is: %d/n", average( 5, 7, 9, 11, -1 ) ); /* Call with just -1 terminator. */ printf( "Average is: %d/n", average( -1 ) ); } /* Returns the average of a variable list of integers. */ #ifdef ANSI /* ANSI compatible version */ int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start( marker, first ); /* Initialize variable arguments. */ while( i != -1 ) { sum += i; count++; i = va_arg( marker, int); } va_end( marker ); /* Reset variable arguments. */ return( sum ? (sum / count) : 0 ); } #else /* UNIX compatible version must use old-style definition. */ int average( va_alist ) va_dcl { int i, count, sum; va_list marker; va_start( marker ); /* Initialize variable arguments. */ for( sum = count = 0; (i = va_arg( marker, int)) != -1; count++ ) sum += i; va_end( marker ); /* Reset variable arguments. */ return( sum ? (sum / count) : 0 ); } #endif Output Average is: 3 Average is: 8 Average is: 0
相关文章推荐
- 如何写参数个数不定的函数(即类似printf的函数)
- 如何写参数个数不定的函数(即类似printf的函数)
- Delphi与VC如何实现变参函数,类似Format、sprintf的变长参数实现原理,va_list与Array of const
- 实现自己的不定参数函数(类似printf)
- 如何写参数个数不定的函数(即类似printf的函数)
- printf函数可变参数是如何实现的?
- va_list、va_start、va_end(用于实现函数参数的个数可变的函数,如scanf()/printf()系列函数)
- 实现类似printf这样的函数
- 从printf谈可变参数函数的实现
- 从printf谈可变参数函数的实现
- 转:从printf谈可变参数函数的实现
- 从printf谈可变参数函数的实现
- Laravel路由中不固定数量的参数如何实现?
- js中方法重载如何实现?以及函数的参数问题
- 一个类如何实现两个接口中同名同参数不同返回值的函数
- 可变参数函数printf函数的实现
- 从printf谈可变参数函数的实现
- 关于printf函数及变参数函数实现
- 如何实现可变参数函数
- 已知参数个数的函数,如何实现柯里化?