[C++] 纯文本查看 复制代码
void testit ( int i, ...);
int average( int first, ... );
DWORD Options (int argc, LPCTSTR argv [], LPCTSTR OptStr, ...);
[C++] 纯文本查看 复制代码
type va_arg(
va_list arg_ptr,
type
);
void va_end(
va_list arg_ptr
);
void va_start(
va_list arg_ptr,
prev_param
); // (ANSI version)
void va_start(
arg_ptr
); // (Pre-ANSI-standardization version)
[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <stdarg.h>
void testit ( int i, ...)
{
va_list argptr;
va_start(argptr, i);
if ( i == 0 ) {
int n = va_arg( argptr, int );
printf( "%d\n", n );
} else {
char *s = va_arg( argptr, char* );
printf( "%s\n", s);
}
}
int main()
{
testit( 0, 0xFFFFFFFF ); // 这里有问题,第 2 个参数 0xffffffff 不是 int 型
testit( 1, NULL ); // 这里也有问题, 第 2 个参数 NULL 不是字符指针类型
}
[C++] 纯文本查看 复制代码
#include "stdafx.h"
int average( int first, ... );
int _tmain(int argc, _TCHAR* argv[])
{
/* 可选参数里使用 3 个整数作为参数,-1 作为结束符号 */
printf( "Average is: %d\n", average( 2, 3, 4, -1 ) );
/* 4 个整数作为可选参数 */
printf( "Average is: %d\n", average( 5, 7, 9, 11, -1 ) );
/* 只有 -1 一个可选参数 */
printf( "Average is: %d\n", average( -1 ) );
return 0;
}
/* 返回可选参数列表里所有整数参数的平均数 */
int average( int first, ... )
{
int count = 0, sum = 0, i = first;
va_list marker;
va_start( marker, first ); /*初始化变量参数 */
while( i != -1 )
{
sum += i;
count++;
i = va_arg( marker, int);
}
va_end( marker ); /* 重置变量参数 */
return( sum ? (sum / count) : 0 );
}