Анализ кода VS11 Подсказки? - PullRequest
0 голосов
/ 10 марта 2012

Я получил много ложных срабатываний при запуске анализа кода для C ++ в VS11.Например, у меня есть несколько десятков переключателей, и он говорит, что мой указатель может быть нулевым.Во всех случаях в коммутаторе (по крайней мере, в одном случае) указатель установлен и по умолчанию вызывается моя функция, которая выдает assert (0) и исключение.Я предполагаю, что поскольку assert и исключение находятся в методе, он не понимает, что указатель не может быть нулевым.Как мне намекнуть или исправить это, чтобы ложный положительный результат не появлялся?

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

попробуйте использовать _Analysis_assume_(FALSE) в коммутаторе, это намекает на недоступный код для компилятора.

Вы также можете украсить функции, которые выдают и не возвращают, с помощью _Analysis_noreturn_.

1 голос
/ 10 марта 2012

Если метод, вызванный регистром по умолчанию, ничего не возвращает, вы можете попытаться заставить его вернуть «поддельное» нулевое значение, которое будет присвоено указателю в регистре по умолчанию.

Type* MyClass::methodCalledInDefaultCase()
{
    pointer = 0;
    assert(0);
    throw Exception;
    return 0; // Hope this doesn't cause unreachable code warning
}

void MyClass::myMethod()
{
    pointer = 0;
    switch(whatever)
    {
        case foo:
            ...

        case bar:
            ....

        default:
            pointer = methodCalledInDefaultCase();
            break;
    }
}

Надеюсь, это поможет.

...