I have this toned down used case of code which when compiled with VS 2015 C++ compiler produces a warning.
#include <cwchar>
#include <iostream>
int main()
{
wchar_t input[100] = L"A bird came down the walk";
wchar_t* token = std::wcstok(input, L" ");
while (token) {
std::wcout << token << '\n';
token = std::wcstok(nullptr, L" ");
}
}
This produced following warnings.
warning C4996: 'wcstok': wcstok has been changed to conform with the ISO C standard, adding an extra context parameter. To use the legacy Microsoft wcstok, define _CRT_NON_CONFORMING_WCSTOK.
1> c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\corecrt_wstring.h(254): note: see declaration of 'wcstok'
warning C4996: 'wcstok': wcstok has been changed to conform with the ISO C standard, adding an extra context parameter. To use the legacy Microsoft wcstok, define _CRT_NON_CONFORMING_WCSTOK.
1> c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\corecrt_wstring.h(254): note: see declaration of 'wcstok'
Looking up online, I read about std::wcstok and breaking changes in VS 2015 which mentions that C standard has introduced a third parameter and that
It used an internal, per-thread context to track state across calls, as is done for strtok. The function now has the signature
wchar_t* wcstok(wchar_t*, wchar_t const*, wchar_t**)
, and requires the caller to pass the context as a third argument to the function.
At the cost of sounding inherently stupid, I will still go ahead and ask, Can anybody please explain the purpose of this third parameter in simple terms and how it has changed std::wcstok
from its earlier version?
Aucun commentaire:
Enregistrer un commentaire