C ++ использование HRESULT для возврата S_OK

В унаследованном коде C ++, над которым я работаю, я заметил, что многие методы, возвращающие HRESULT, следуют практике установки локальной переменной в S_OK, а затем возвращают ее в конце метода, не меняя его.

    HRESULT function()
{
HRESULT hr = S_OK;
// do some stuff
// none of which changes hr
...
return hr;
}

Есть ли какие-либо преимущества вышеуказанного кода? Или я могу безопасно сделать рефакторинг

    void function()
{
// do some stuff
// none of which changes hr
...
}

0

Решение

Рефакторинг, который вы предлагаете, должен работать нормально. Просто отметьте, что если в коде есть места, в которых используется возвращаемое значение функции, вы получите ошибку компилятора, и вам придется исправить эти места.

Также обратите внимание, что в будущих версиях кода будет сложнее добавить случай ошибки в эту функцию, так как вам придется заново ввести возвращаемое значение и изменить всех вызывающих. Оригинальный разработчик, вероятно, вернулся S_OK из-за чувства согласованности или ожидания того, что однажды функция может вызвать ошибки.

3

Другие решения

Если ваша функция всегда успешно (или другими словами никогда не выполняет то, что не удается), вы можете избавиться от этого. Так что это зависит от содержания и того, что делает ваша функция. Если вы переключитесь на void и вы вызываете свою функцию, вы никогда не узнаете, «успешно» или нет.

Имейте в виду, что тело функции может быть изменить в будущем, и когда вам вдруг понадобится вернуть ошибку, вы должны обновить вызовы, чтобы правильно обрабатывать ошибки.

0

По вопросам рекламы [email protected]