C语言的可变参数
2025年7月6日 02:32
介绍
C语言中,printf()和scanf()函数就是典型的变参函数,其优点是灵活处理参数。
想要创建变参函数需引入头文件stdarg.h,它有一些宏:
va_list 指向整个可变参数列表的指针
原型:typedef char* va_list;
va_start 指向可变参数列表前的参数(...前的参数)
原型:void va_start(va_list ap, paramN);
va_arg 可变参数列表
原型:typedef va_arg(va_list ap, type)
va_end 结束对可变参数列表的访问,并释放资源
原型:void va_end(va_list ap);
使用例
#include <stdio.h>
#include <stdarg.h>
// 定义一个使用省略号的函数原型
void function(int argument, ...)
{
        // 声明一个va_list类型的变量ap,这是可变参数列表
        va_list ap;
        // 使用va_start把变量ap初始化为参数列表
        va_start(ap, argument);
        // 第二个参数表明本函数期望传入一个int类型
        // 但是编译器不会检查到底输入了什么。
        int output = va_arg(ap, int);
        printf("可变参数:%d\n", output);
        va_end(ap);
}...剩余内容已隐藏
查看完整文章以阅读更多
C语言的可变参数
2025年7月6日 02:32
介绍
C语言中,printf()和scanf()函数就是典型的变参函数,其优点是灵活处理参数。
想要创建变参函数需引入头文件stdarg.h,它有一些宏:
va_list 指向整个可变参数列表的指针
原型:typedef char* va_list;
va_start 指向可变参数列表前的参数(...前的参数)
原型:void va_start(va_list ap, paramN);
va_arg 可变参数列表
原型:typedef va_arg(va_list ap, type)
va_end 结束对可变参数列表的访问,并释放资源
原型:void va_end(va_list ap);
使用例
#include <stdio.h>
#include <stdarg.h>
// 定义一个使用省略号的函数原型
void function(int argument, ...)
{
        // 声明一个va_list类型的变量ap,这是可变参数列表
        va_list ap;
        // 使用va_start把变量ap初始化为参数列表
        va_start(ap, argument);
        // 第二个参数表明本函数期望传入一个int类型
        // 但是编译器不会检查到底输入了什么。
        int output = va_arg(ap, int);
        printf("可变参数:%d\n", output);
        va_end(ap);
}...剩余内容已隐藏
查看完整文章以阅读更多