Microsoft SAL - предупреждение C28285: для функции 'имя_функции' синтаксическая ошибка в 'аннотации'
В настоящее время Microsoft не предоставляет аналог
StringCbLengthA
а также
StringCbLengthW
для новых типов символов C++: и
char32_t
. Итак, я решил продублировать текущие реализации для новых типов символов. Для
char16_t
, Я добавил эту функцию:
typedef const char16_t* STRSAFE_PCNZUCH;
_Must_inspect_result_ STRSAFEAPI StringCbLengthU(
_In_reads_or_z_(cbMax / sizeof(char16_t)) STRSAFE_PCNZUCH psz,
_In_ _In_range_(1, STRSAFE_MAX_CCH * sizeof(char16_t)) size_t cbMax,
_Out_opt_ _Deref_out_range_(< , cbMax - 1) size_t* pcbLength)
{
HRESULT hr;
size_t cchMax = cbMax / sizeof(char16_t);
size_t cchLength = 0;
if ((psz == NULL) || (cchMax > STRSAFE_MAX_CCH))
{
hr = STRSAFE_E_INVALID_PARAMETER;
}
else
{
hr = StringLengthWorkerU(psz, cchMax, &cchLength);
}
if (pcbLength)
{
if (SUCCEEDED(hr))
{
// safe to multiply cchLength * sizeof(char16_t) since cchLength < STRSAFE_MAX_CCH and sizeof(char16_t) is 2
*pcbLength = cchLength * sizeof(char16_t);
}
else
{
*pcbLength = 0;
}
}
return hr;
}
Однако это генерирует предупреждение типа C28285. В любом случае, чтобы исправить этот код, чтобы избежать этого предупреждения?