va_arg 以 mac 上的第二个参数开始 (clang++)

va_arg begins by the second parameter on mac (clang++)

代码

TextureMeta(string tex_, int args_, const char* ...)
{
    va_list vl;
    va_start(vl, args_);
    for (int i = 0; i < args_; i++)
    {
        string img_(va_arg(vl, char*));
        cout << img_ << endl;
        images.push_back(img_);
    }
    va_end(vl);
}

在 MSVC 上它工作正常但在 MacOS 上生成的应用程序出现分段错误, 我可以看到代码首先打印第二个参数,日志显示 TextureMeta(this=0x000000010174d680, tex_="resource/skybox/mitsuumi", args_=6, (null)="resource/skybox/mitsuumi/right.jpg"),似乎第一个 va 参数成为函数参数并且无法迭代。 我正在使用 CMake,生成器是默认的。

这是 mac clang 错误吗? 或者上面的代码中是否有未定义的标准?

TextureMeta(string tex_, int args_, const char* ...)

这是

的简称
TextureMeta(string tex_, int args_, const char*,  ...)

这意味着你在省略号之前有3个正则参数。你想要的是:

TextureMeta(string tex_, int args_, ...)

Live