va_arg的一个问题,求解释

ken_scott ken_scott 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

#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下)
周五被同事问到这个问题,不知原因,求解释!
...全文
评论 10
收藏 已收藏
分享
返回顶部
ken_scott
C语言 70,040 成员 243,237 内容