va_arg的一个问题,求解释
#include <stdarg.h>
#include <cstdio>
#include <cassert>
void va_test(int ifirst, ...)
{
int ivalue = ifirst;
va_list va;
va_start(va, ifirst);
while (-1 != ivalue)
{
printf("%d ", ivalue);
ivalue = va_arg(va, int);
}
printf("\n");
va_end(va);
}
void va_test(float ffirst, ...)
{
float fvalue = ffirst;
va_list va;
va_start(va, ffirst);
while (-1.0000001f > fvalue || -0.9999999f < fvalue)
{
printf("%f ", fvalue);
fvalue = va_arg(va, float);
}
printf("\n");
va_end(va);
}
void va_test(double dfirst, ...)
{
double dvalue = dfirst;
va_list va;
va_start(va, dfirst);
while (-1.0000001 > dvalue || -0.9999999 < dvalue) // ignore it
{
printf("%f ", dvalue);
dvalue = va_arg(va, double);
}
printf("\n");
va_end(va);
}
int main(int argc, char * argv[])
{
assert(sizeof(int) == sizeof(float));
va_test(1, 2, 3, -1); // as we want
va_test(1.0, 2.0, 3.0, -1.0); // as we want
va_test(1.0f, 2.0f, 3.0f, -1.0f); // badly
return(0);
}
如注释,float的测试不对,(VS2010下)
周五被同事问到这个问题,不知原因,求解释!
...全文
相关推荐
在C语言中常见的算法
可变参数:C语言中的可变参数函数,如printf函数,使用va_list、va_start、va_arg和va_end宏来处理。
va_list(),va_start(),va_arg(),va_end() 详细解析
"这篇文档详细解析了C语言中用于处理可变参数的四个关键宏:va_list(), va_start(), va_arg(), 和 va_end()。这些宏允许程序员编写接受不同数量参数的函数,提供了灵
关于C/C++中可变参数的详细介绍(va_list,va_start,va_arg,va_end)
例如,`int j = va_arg(arg_ptr, int)`将获取一个整型参数赋值给`j`,然后`arg_ptr`会自动移动到下一个参数。
va_start、va_end、va_list的详细使用方法
**`va_end(arg_ptr)`**:清理资源,将`arg_ptr`设置为无效状态。#### 编程中应注意的问题及解决办法使用这些宏来处理可变参数列表时需要注意以下几点:1.
va-list原理解释
使用VA_LIST应该注意的问题:1.


