C语言中 variable argument 可变参数用法

C语言可变参数详解
本文介绍了C语言中如何使用可变参数,并提供了简单的示例代码。通过使用stdarg.h库中的宏,例如va_start, va_arg和va_end,开发者可以创建接受不定数量参数的函数。
如果函数的形参不确定,C 函数可以使用可变参数定义,用3个点 '.' 表示(...),很多我们经常用到的 printf 等函数都是这种形式定义的如:
#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, ...);
要定义自己的可变参数函数,需要包含<stdarg.h>,其中包含 va_list 和相关宏,具体点就3个宏 va_start,
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
}

上面代码中用到了 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 
在C语言中,创建一个可以接受不定数量参数的函数通常通过使用可变参数列表(Variable Argument List,VLA)和`stdarg.h`库来实现。然而,需要注意的是,从C99标准开始,C语言才正式支持VLA,但在某些旧版本的编译器或系统上可能不可用。 下面是一个简单的例子,展示了如何使用`va_list`, `va_start`, `va_arg`和`va_end`来处理可变参数: ```c #include <stdarg.h> #include <stdio.h> // 定义一个接受可变参数的打印函数 void print_varargs(const char *fmt, ...) { va_list args; // 创建一个变量参数列表 va_start(args, fmt); // 初始化参数指针 while (*fmt) { // 当格式字符串还有内容时 if (*fmt == '%') { // 如果遇到%符号,表示参数开始 int type = 0; switch (*(++fmt)) { // 根据下一个字符判断参数类型 case 'd': type = INT; break; // 整数 /* 添加其他类型的支持 */ default: printf("Unknown format specifier.\n"); break; } va_arg(args, type); // 获取并打印对应类型的参数 } else { // 非参数字符直接输出 printf("%c", *fmt); } fmt++; // 移动到下一个字符 } va_end(args); // 清理参数列表 } int main() { print_varargs("Integer: %d, Float: %f\n", 42, 3.14); return 0; } ``` 在这个例子中,`print_varargs`函数会根据格式字符串 `%d` 和 `%f` 输出相应的整数和浮点数。注意,这只是一个简化的示例,实际使用中需要考虑错误处理、不同类型参数的转换等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值