prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 15.8

我怎样才能知道一个函数实际被调用时传入了多少个参数?


对于可移植的程序来说,这个信息是无法获得的。一些旧的系统提供了非标准的nargs函数,但它的使用总是值得怀疑的,因为它通常返回传递的单词数,而不是参数的数量。(结构体、long ints 和浮点值通常由多个单词传递。)

任何接受可变数量参数的函数都必须能够 *从参数本身* 确定参数的数量。printf类函数通过在格式字符串中查找格式说明符(%d及类似字符)来实现这一点(这就是为什么如果格式字符串与参数列表不匹配,这些函数会严重失败的原因)。另一种常见技术,适用于所有参数类型都相同的情况,是使用一个哨兵值(通常是 0、-1 或适当转换的空指针)放在列表的末尾(请参阅问题execlvstrcat5.2 和 15.4 中的示例)。最后,如果类型是可预测的,您可以传递一个显式的可变参数数量计数(尽管这通常会给调用者带来不便)。

参考文献:PCS 第 11 章,第 167-168 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管