Почему я получаю CA1806, когда улавливаю исключение в C ++ / CLI? - PullRequest
0 голосов
/ 18 мая 2010

Я недавно обновил свой проект с Visual Studio 2008 до Visual Studio 2010.

При включении анализа кода и компиляции в выпуске я получаю предупреждение CA1806: не игнорируйте результаты метода.

Мне удалось сократить код, выдающий предупреждение, до следующего кода:

.h файл:

public ref class Foo
{
public:
    void Bar();
};

.cpp файл:

void Foo::Bar()
{
    try
    {
    }
    catch (const std::exception&) // here I get the warning
    {
    }
}

предупреждение:

CA1806: Microsoft.Usage: 'Foo :: Bar (void)' вызывает «Global :: __ CxxRegisterExceptionObject (недействительными *, void *) ', но не использует HRESULT или код ошибки, который возвращает метод. Это может привести к неожиданному поведению в условиях ошибки или низкого ресурса ситуации. Используйте результат в условное утверждение, присвойте привести к переменной или передать ее как аргумент другого метода.

Если я пытаюсь использовать значение исключения или сделать catch(...), появляется предупреждение все еще . Если я перехватываю управляемые исключения или компилирую в Debug, я не получаю предупреждение.

Почему я получаю это предупреждение?

UPDATE

Я решил открыть отчет об ошибке в Microsoft Connect .

Ответы [ 2 ]

0 голосов
/ 29 мая 2010

Это ошибка Visual Studio 2010.

Как вы можете видеть в отчете об ошибке , Microsoft воспроизвела ошибку и решила отложить решение без обходного пути.

Вы можете проголосовать за ошибку, поэтому, возможно, Microsoft решит ее устранить раньше.

0 голосов
/ 18 мая 2010

Возможно, потому что вы не вызывали код, который может выдать.

...