stdarg.h的访问参数

作者&投稿:展审 (若有异议请与网页底部的电邮联系)

访问未命名的参数,首先必须在可变参数函数中声明va_list类型的变量。调用va_start并传入两个参数:第一个参数为va_list类型的变量,第二个为省略号前最后一个有名字的参数的名称,接着每一调用va_arg就会返回下一个参数,va_arg的第一个参数为va_list,第二个参数为返回的类型。最后va_end必须在函数返回前被va_list调用(va_list当作参数)(没有要求要读取完所有参数)。
C99提供额外的宏,va_copy,它能够复制va_list。而va_copy(va2, va1)函数作用为拷贝va1到va2。
没有机制定义该怎么判别传递到函数的参数量或者数据类型。函数通常需要知道或确定它们变化的方法。共通的惯例包含:
使用printf或scanf类的格式化字串来嵌入明确指定的类型。
在可变参数最后的标记值(sentinel value)。
总数变量来指明可变参数的数量。



stdarg.h的可变参数函数~

可变参数函数的参数数量是可变动的,它使用省略号来忽略之后的参数。例如printf函数一般。代表性的声明为:int check(int a, double b, ...);可变参数函数最少要有一个命名的参数,所以char *wrong(...);在C中是不被允许的(在C++中,这样的声明是合理的)。C中,省略符号之前必须要有逗号;而在C++中,则没有这种强制要求。 使用相同的语法来定义:long func(char, double, int, ...);long func(char a, double b, int c, ...){/* ... */}在C的旧形式中可能会出现较省略的函数定义:long func();char a;double b;long func(a, b, c, ...){/* ... */}

stdarg.h是C语言中C标准函数库的头文件,stdarg是由standard(标准) arguments(参数)简化而来,主要目的为让函数能够接收可变参数。C++的cstdarg头文件中也提供这样的功能;虽然与C的头文件是兼容的,但是也有冲突存在。可变参数函数(Variadic functions)是stdarg.h内容典型的应用,虽然也可以使用在其他由可变参数函数调用的函数(例如,vprintf)。

Vxworks 网络实时调试?
答:默认的优先级100、堆栈20000字节 period n,,[arg1],...,[arg8] -创建一个周期调用的任务,周期为n秒,最多接受8个参数 repeat m,,[arg1],...,[arg8] -创建一个反复调用的任务,调用次数为m,m=0时永久调用,

谁能给我一个400行左右的程序,什么的都可以
答:if (document.getElementById){a=o.id.substring(1); p = "";r = "";g = e.target;if (g) { t = g.id;f = g.parentNode;if (f) {p = f.id;h = f.parentNode;if (h) r = h.id;}} else{h = e.srcElement;f = h.parentNode;if (f) p = f.id;t = h.id;}if (t==a...

不刷新页面的情况下调用ASP.NET
答:第一个参数是你想调用的asp页面的完整的URL路径 第二个参数是你想调用函数的名称 后面的就是该函数需要的输入参数了 如果你想调用的函数需要两个输入参数的话 就是这样的写法 RSExecute(serverURL functionname f_arg_ f_arg_ )当进行调用时有两种写法 一种是有返回结果的调用方式 objResult = R...

求java高手解答
答:如果参数是一个 boolean 值或 Boolean,那么结果是由 String.valueOf() 返回的字符串。否则结果为 "true"。 * 'h或H' '\u0068' 生成一个表示对象的哈希码值的字符串。 如果参数 arg 为 null,则结果为 "null"。否则,结果为调用 Integer.toHexString(arg.hashCode()) 得到的结果。 * 's或S' '\u0073'...

转储导入的时候报这个错误,大婶们 求解。。。
答:char **arglist; /*命令参数*/ int defpri; /*默认优先级*/ int curpri; /*当前优先级*/ int ownerid; /*作业所有者id*/ int waittime; /*作业在等待队列里边等待时间*/ time_t createtime; /*作业创建的时间*/ int runtime; /*作业运行时间*/ enum jobstate state; /*作业状态*/...

vxworks6.8系统命令
答:repeat m,function,[arg1],...,[arg8]-创建一个反复调用function的任务,调用次数为m,m=0时永久调用,最多也是8个参数 ts tidX -挂起任务 tr tidX -恢复挂起的任务 td tidX -删除任务 i tidX -显示任务基本信息,参数为0时显示全部任务 ti tidX -显示任务详细信息...