C++ swprintf声明不匹配

C++ swprintf声明不匹配,c++,c,mingw,C++,C,Mingw,我在Windows gcc版本4.8.1上使用MinGW g++编译器,我对swprintf声明感到困惑 根据它应该是 int swprintf (wchar_t* ws, size_t len, const wchar_t* format, ...); 但是当我使用 swprintf(my_ws, 32, L"hello"); 我犯了一个错误 initializing argument 2 of 'int swprintf(wchar_t*, const wchar_t*, ...)' [

我在Windows gcc版本4.8.1上使用MinGW g++编译器,我对swprintf声明感到困惑

根据它应该是

int swprintf (wchar_t* ws, size_t len, const wchar_t* format, ...);
但是当我使用

swprintf(my_ws, 32, L"hello");
我犯了一个错误

initializing argument 2 of 'int swprintf(wchar_t*, const wchar_t*, ...)' [-fpermissive]

看起来声明中没有尺寸。引用错误了吗?我遗漏了什么吗?或者这背后有什么故事吗?

您使用的C库不符合C99标准

MinGW是gcc的一个端口,它使用microsoftcruntime库

在被标准化为C99之前,微软有自己的swprintf版本,其原型有所不同。这是一个非常古老的C库,有很多C99不兼容,例如,我认为它的printf不支持%zu的大小


如果MinGW使用较新的运行时,则应升级到较新版本的MinGW。否则,您将不得不使用旧的原型,并使用这些过时的API。

mingw不是visual studio吗?MIW使用Gcc/G++吗?我理解,但是MinGW使用微软C++库来编译它们。具有旧的非标准参数的非常旧的msvcrt.dll。事实上,msvcrt.dll并不太旧,但它与msvc6.0向后兼容,因此……特别是,随msvc140.dll或其他名称一起提供的新Visual Studio对继续使用msvcrt的mingw没有任何影响。dll@BenVoigt:你是对的,我更新了我的答案。希望MinGW最终能支持更新的C运行时,因为微软似乎最终接近C99。您使用的是哪个MinGW版本?gcc版本是4.8.1,在编译器开关中定义USE_MinGW_ANSI_STDIO,例如-DUSE_MinGW_ANSI_STDIO