Анализатор обнаружил подозрительное сравнение адресов двух функций.
Пример:
namespace MyNamespace { int one() noexcept; int two() noexcept; } using namespace MyNamespace; void SomeFunction() { if (one != two) { // do something } .... }
Сравнение в данном случае всегда вернет 'true', так как 'one' и 'two' – имена функций с совместимыми сигнатурами, объявленных в пространстве имен 'MyNamespace'. Вероятно, что в этом случае предполагалось сравнение возвращаемых значений, но автор кода забыл добавить к именам функций круглые скобки:
namespace MyNamespace { int one() noexcept; int two() noexcept; } using namespace MyNamespace; void SomeFunction() { if (one() != two()) { // do something } }
Также подобный код может быть результатом неудачного рефакторинга. Если внутри функции сравнивались локальные переменные, которые в какой-то момент были удалены из кода, при этом само условие сохранилось, то вполне возможно, что будет происходить сравнение функций с такими же именами.
Пример кода до рефакторинга:
namespace MyNamespace { int one() noexcept; int two() noexcept; } using namespace MyNamespace; void SomeFunction(int one, int two) { if (one != two) { // do something } }
Данная диагностика классифицируется как:
|