728x90
반응형
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Example http://msdn.micrsoft.com/ | |
/* 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 ); /* get an integer argument */ | |
} | |
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 |
728x90
반응형
'C C++' 카테고리의 다른 글
VCL Example Main Source - Project1.cpp (0) | 2007.08.03 |
---|---|
Visual C++ 6.0 재배포 패키지(vc6redist)와 호환성 이슈 (0) | 2007.07.31 |
C++ 오버로딩 (Overloading on the C++) (0) | 2007.06.14 |
현재 윈도우즈 버전 얻기 예제 (0) | 2007.05.19 |
C++ 상수 포인터 (0) | 2007.05.17 |