va_start、va_end、va_arg 实现可变长参数

/*******************************/
//va_start、va_end、va_arg 实现可变长参数
/*******************************/

#include <stdarg.h>
#include <stdio.h>

#define END_NUM -1
void trease_array(int first_num,...)
{
int result1 = 0;
int result2 = 0;
int temp = 0;

va_list ap;

va_start(ap,first_num);

result1 =first_num;

while( (temp = va_arg(ap,int)) != END_NUM)
{
result1 += temp;
}

printf("%d\n",result1);

va_end(ap);
}

int main(void)
{
trease_array(1,2,3,4,5,END_NUM);
return 0;
}

原文地址:https://www.cnblogs.com/muzixiaofeng/p/10088734.html

时间: 2024-11-10 11:41:37

va_start、va_end、va_arg 实现可变长参数的相关文章

深度探索C语言函数可变长参数

通常我们使用的C函数的参数个数都是固定的,但也有不固定的.比如printf()与scanf().如何自己动手实现一个可变参数函数,这个还是有点技巧的. 我们最常用的就是定义一个宏,使用printf或者printk,如下 #define wwlogk(fmt, args...) printk(fmt, ## args) 现在我们自己动手实现一个可变参数的函数,后面分析原理.首先看一个例子: #include <stdio.h> #include <stdarg.h> int Sum(

C 可变长参数运用-----编写Lua的通用调用函数

1.C可变长参数 printf这个使用频繁的C语言函数的参数列表包含一个const char*的描述串,还有一个可变长参数(...) ,如下为printf的函数声明. int printf(const char * __restrict, ...) 在stdarg.h这个头文件中包含着对可变长参数进行操作的一些宏(x86平台为例): #define va_start(ap,v)( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) ( 

C语言可变长参数实现原理

博客:存储系统研究 微博:http://weibo.com/u/2203007022             (1)      C语言可变参数 我们可以从C语言的printf得出可变参数的作用,printf函数的原型如下: int printf ( const char * format, ... ); 通过使用可变个数参数,就是传入的参数个数是可变的,如printf需要根据format实参传入多个实参. (2)      C语言可变参数的使用 下面一个函数myprintf是自己实现的比较简单的

C 可变长参数

前面说到可变长参数: 最后重要的是:第一个参数为后面的参数的形式,format.i.e. printf 在这篇中想说的是不安全的问题 -.-!其实就是我瞎搞 先上代码 #include <stdio.h> #include <stdlib.h> #include <stdarg.h> void subfunc(char *format,...){ int i; va_list ap; va_start(ap,format); for(i=0;format[i]!='\0

C语言可变长参数 思考

1.我们为什么需要可变长参数 各种编程语言,如C.C++.java等都实现了可变长参数的函数.普通函数的参数个数是确定的,如果同一个函数可以接受不同数目的参数就需要适用到可变长度的参数.可变长度参数一个最典型的例子就是printf和scanf.以printf为例子,如可以有printf("Hello Word"),printf("Hello word%s","!"),printf("Hello word%s%d","

可变长参数的函数的写法

c语言中的可变长参数的函数小例子: #include <stdio.h> #include <stdarg.h> #include <assert.h> static int pp; void func1() { static int pp1; printf("hello world\n"); } void tiny_printf(char *format, ...) { int i; va_list ap; va_start(ap, format)

[C]va_list可变长参数的使用

一.概述 运用标准C的头文件stdarg.h提供的宏可以实现函数的自定义传参个数: 二.语法 1.va_list是一个可变长参数类型,在使用可变长参数的函数中可以定义1个或多个va_list类型参数,等待va_start初始化后使用: va_list parg_1; va_list parg_2; 2.va_start作用是给va_list类型变量绑定一个起始值 宏原型: void va_start(va_list ap, last); ap是va_list类型变量: last是函数的最后一个固

关于C中可变长参数

前言 可变长参数指函数的参数个数在调用时才能确定的函数参数.基本上各种语言都支持可变长参数,在特定情形下,可变长参数使用起来非常方便.c语言中函数可变长参数使用"..."来表示,同时可变长参数只能位于固定参数的后面,固定参数的个数至少为1.只要学习过c语言的,应该都知道printf函数,并且见识到了其强大的功能--事实上,迄今为止,我仍认为这是c函数库中最牛逼的函数之一. 一.一个简单的例子 #include <string>  #include <stdio>

Java中可变长参数的使用及注意事项

在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,例如print("hello");print("hello","lisi");print("hello","张三", "alexia");下面介绍如何定义可变长参数 以及如何使用可变长参数. 1. 可变长参数的定义 使用...表示可变长参数,例如 prin