如果函数的形参不确定,C 函数可以使用可变参数定义,用3个点 '.' 表示(...),很多我们经常用到的 printf 等函数都是这种形式定义的如:
要定义自己的可变参数函数,需要包含<stdarg.h>,其中包含 va_list 和相关宏,具体点就3个宏 va_start,
va_end,va_arg,va 表示 variable argument
简单的可变参数的用法
上面代码中用到了 vprintf 函数,关于这类函数介绍:
#include
<
stdio.h
>
printf:
int printf( const char * format, ...);
sprintf:
int sprintf( char * str, const char * format, ...);
fprintf:
int fprintf(FILE * fp, const char * format, ...);
printf:
int printf( const char * format, ...);
sprintf:
int sprintf( char * str, const char * format, ...);
fprintf:
int fprintf(FILE * fp, const char * format, ...);
va_end,va_arg,va 表示 variable argument
简单的可变参数的用法
void
simpleprint(
char
*
format, ...)
{
va_list arg; // 定义一个 va_list 变量
va_start(arg, format); // 指向可变参数的第一个参数
vprintf(format, arg); // 调用 vprintf 函数执行
va_end(arg); // 将 arg 置为 NULL
}
{
va_list arg; // 定义一个 va_list 变量
va_start(arg, format); // 指向可变参数的第一个参数
vprintf(format, arg); // 调用 vprintf 函数执行
va_end(arg); // 将 arg 置为 NULL
}
上面代码中用到了 vprintf 函数,关于这类函数介绍:
#include
<
stdarg.h
>
vprintf:
vprintf( const char * format, va_list ap); // ap 指向第一个可变参数,功能和 printf 一样
vfprintf;
vfprintf(FILE * fp, const char * format, va_list ap); // 类似 fprintf
vsprintf:
vsprintf( char * str, const char * format, va_list ap); // 类似 sprintf
vprintf:
vprintf( const char * format, va_list ap); // ap 指向第一个可变参数,功能和 printf 一样
vfprintf;
vfprintf(FILE * fp, const char * format, va_list ap); // 类似 fprintf
vsprintf:
vsprintf( char * str, const char * format, va_list ap); // 类似 sprintf