c语言函数的可选性自变量

功能: 宏va_arg()用于给函数传递可变长度的参数列表。

  1. 首先,必须调用va_start() 传递有效的参数列表va_list和函数强制的第一个参数。第一个参数代表将要传递的参数的个数。
  2. 其次,调用va_arg()传递参数列表va_list 和将被返回的参数的类型。va_arg()的返回值是当前的参数。
  3. 再次,对所有的参数重复调用va_arg()
  4. 最后,调用va_end()传递va_list对完成后的清除是必须的。
 1 #include <stdio.h>
 2 #include <stdarg.h>
 3 int sum( int, ... );
 4
 5     int main( void )
 6 {
 7
 8
 9
10       int answer = sum( 4, 4, 3, 2, 1 );
11
12       printf( "The answer is %d\n", answer );
13
14
15
16       return( 0 );
17
18 }
19
20
21
22     int sum( int num, ... )
23 {
24
25       int answer = 0;
26
27       va_list argptr;
28
29       va_start( argptr, num );
30
31       for( ; num > 0; num-- )
32
33         answer += va_arg( argptr, int );
34
35       va_end( argptr );
36
37       return( answer );
38
39 }

这段代码显示10,他们是4+3+2+1。

时间: 2025-01-17 18:28:49

c语言函数的可选性自变量的相关文章

[ASM C/C++] C语言函数的可选性自变量

    函数的可选性自变量  C语言允许定义自变量数量可变的函数,称为variadic函数.variadic函数需要固定数目的强制性自变量,后面是数量可变的可选性自变量. 也就是说必须至少有一个强制性自变量. variadic 可变参数数量有前面的强制性自变量决定,或者有定义可选性自变量列表的特殊值决定. 经典的函数是printf 和 scanf,这两个是通过格式化字符串来提取可变参数的数量的. 定义: void test(int count, ...) 编写variadic函数时,必须用va_

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

GO语言结构体相等性

go语言结构体相等性是通过结构体成员的相等来判断的. 之前还在疑惑errors.New返回的结构体为什么会不相等,而且Read函数会返回io.EOF,很多例子代码都会把Read返回返回的error值来和io.EOF做比较,原来io.EOF是错误对象的指针,而不是错误对象本身.一个对象被实例化再多,他们的对象指针一定是不同的,这样就可以得知Read函数返回值和io.EOF比较的原因,因为比较的就是对象指针值,是纯数字的比较,这样也就区分了对象的不同实例.

借助动态代码生成技术在基于Webkit引擎的HTML5网页JS内调用易语言函数

作者:庄晓立(Liigo) 日期:2015年3月3日夜 原创链接:http://blog.csdn.net/liigo/article/details/44045177 版权所有,转载请注明出处:http://blog.csdn.net/liigo 前两天我协助解决了一个技术问题,在此稍作记录和总结. 具体来说,就是在使用基于Webkit引擎的封装组件wke的过程中,需要把一个易语言函数注册给JavaScript引擎,让它可以在网页里被调用(就像在网页里调用普通JavaScript函数一样).如

Go 语言函数

Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回类型,和参数. Go 语言标准库提供了多种可动用的内置的函数.例如,len() 函数可以接受不同类型参数并返回该类型的长度.如果我们传入的是字符串则返回字符串的长度,如果传入的是数字,则返回数组中包含的函数个数. 函数定义 Go 语言函数定义格式如下: func function_name( [pa

Matlab调用C语言函数

Matlab调用C语言函数 如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:double add(double x, double y) { return x + y ;}现在我想要在Matlab中使用它,比如输入:>> a = add(1.1, 2.2)                                                     3.3000要得出以上的结果,那应该怎样做呢?解决方法之一是要通过使用MEX文件,MEX文件使得调用C函数和调用Matl

05. Go 语言函数

Go 语言函数 函数是组织好的.可重复使用的.用来实现单一或相关联功能的代码段,其可以提高应用的模块性和代码的重复利用率. Go 语言支持普通函数.匿名函数和闭包,从设计上对函数进行了优化和改进,让函数使用起来更加方便. Go 语言的函数属于"一等公民"(first-class),也就是说: 函数本身可以作为值进行传递. 支持匿名函数和闭包(closure). 函数可以满足接口. Go语言函数声明(函数定义) 函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 fun

c 语言 函数的整理 百度脑图版本

下面整理一下C语言函数的知识点 :使用百度脑图进行整理,详情请看上传的图片: 版权声明:本文为博主原创文章,未经博主允许不得转载.

汇编1 ----C语言函数1

构造以下C程序并在合适位置插入breakpoints 在Visual Studio 2015 CTP6对其反汇编. 下面来分析 z = add(1, 2); 009C170E 6A 02 push 2 ????int z; ????z = add(1, 2); 009C1710 6A 01 push 1 009C1712 E8 8D FA FF FF call 009C11A4 009C1717 83 C4 08 add esp,8 009C171A 89 45 F8 mov dword ptr