编译错误的含义:错误C2704:__va_start内部只允许在varargs中使用?

Cod*_*777 3 c++ winapi win64 variadic-functions visual-studio-2010

我正在使用VS2010 Pro编译器,当我在x64上构建时,我得到以下编译错误.在x86上完美编译.错误C2704:'':__va_start内部仅允许在varargs中

方法声明:

int foo(char* buf, int maxChar, const char*& fmt);
Run Code Online (Sandbox Code Playgroud)

定义:

 int foo(char* buf, int maxChar, const char*& fmt)
{
    int numChar = 0;
    if (fmt)
    {
        va_list plist;
        va_start(plist, fmt);
        numChar = _vsnprintf(buf, maxChar, fmt, plist);
        va_end(plist);
    }
    return numChar;
}
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?如何解决这个问题?

Jon*_*ter 7

我认为这几乎意味着它所说的.编译器不会允许您使用va_start,va_arg等等,除了在变量参数功能.va_start在vararg函数之外使用是没有意义的.

这没有定义变量参数函数:

int foo(char* buf, int maxChar, const char*& fmt)
Run Code Online (Sandbox Code Playgroud)

这样做:

int foo(char* buf, int maxChar, const char*& fmt, ...)
Run Code Online (Sandbox Code Playgroud)