- 论坛徽章:
- 0
|
9.12.4 标准形式
为了保证不确定参数函数代码的可移植性,C语言标准库提供了一套宏。尽管这套宏具有很好的可移植性,但使用起来非常笨拙且程式化,含义非常抽象难解,因此本书在每个步骤后都提供了一个不严格的非正式注解,以帮助读者理解。
这套宏的定义写在stdarg.h文件中,因此需要首先写编译预处理命令。
(1)#include <stdarg.h>
(2)va_list ap;/*这个“ap”用于遍历各个“…”中的参数。“va_list”是什么类型?是“…”类型。“…”是什么类型?不清楚。实际上这应该是个“void *”,但这是我猜的。*/
(3)va_start(ap,最后一个确定参数的类型)/*这是让“ap”获得初始值,也就是指向第一个可变参数。应该是“ap = (void)(&最后一个确定参数+1)”,这也是我猜的。*/
(4)va_arg(ap,可变参数的类型) /*这句的含义是求当前可变参数的值并把“ap”移至下一个可变参数。大体上应该是“*((可变参数的类型 *)ap)++”,然而“((可变参数的类型 *)ap)++”并不合法,所以这里很可能还需要其他编译手段,比如借助临时变量等。*/
(5)va_copy(dst,src) /*这是C99新增加的内容,可以复制一个“ap”的副本,在“src”被改变的情况下,一旦需要,还可以从前面重新读取参数。*/
(6)va_end(ap) /*这是在读完参数后对前面可能用到的临时变量等进行清理。*/
我觉得一本书里不应该这样向读者(或者是像我这样的初学者)来描述 |
|