出什么事了?我们告诉findaverage()我们要给它6的值,但我们只给了它5。因此,前五个值,va_arg()回报我们过去的。第六它返回的值是在某处的一个垃圾堆的价值。因此,我们有一个垃圾的回答。
使用定点值时,如果对方不包括前哨,循环将持续直到它进入垃圾匹配的前哨(或崩溃)。
对椭圆的使用更安全的建议
首先,如果可能的话,不使用椭圆!通常情况下,其他合理的解决方案是可用的,即使他们需要更多的工作。例如,在我们的findaverage()程序,我们可以在一个动态大小的整数数组,而不是通过。这将提供强类型检查(以确定调用者不尝试做一些无意义的)同时保留通过一个整数变量数被平均的能力。
第二,如果你使用椭圆,不要将预期的参数类型在你的椭圆,如果可能的话。这样做大大增加的可能性,对方无意中传递数据的错误的类型和va_arg()制造垃圾的结果。
第三,使用统计参数作为参数列表部分通常比使用定点为椭圆参数更安全。这迫使用户选择的计算参数的适当的值,保证了椭圆环将终止一个合理的迭代次数后,即使它产生的垃圾的价值。