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. В любом случае, чтобы исправить этот код, чтобы избежать этого предупреждения?

0 ответов

Другие вопросы по тегам