当我使用变量参数时,它适用于int和double,但是当涉及到float时,会发生错误

0 c c++ visual-studio-2008 visual-c++ c++11

当我使用变量参数时,它适用于int和double,但是当涉及到float时,会发生错误.

这是代码.

void vaParamTest(int a, ...)
{
    va_list ap;
    va_start(ap, a);
    for (int  i = 0; i < a; i++)
        printf("%f\t", va_arg(ap, float));
    putchar('\n');
    va_end(ap);
}
Run Code Online (Sandbox Code Playgroud)

我传递这样的参数.

vaParamTest(3, 3.5f, 8.3f, 5.1f);
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 10

作为可变参数函数参数传递的变量是默认提升的,这使得所有floats成为doubles.你永远不会有一个float参数(就像你永远不会有一个char参数).在printf,%f总是意味着double.