# V516. Non-null function pointer is compared to null. Consider inspecting the expression.

В коде имеется конструкция сравнения ненулевого указателя на функцию с нулем. Скорее всего, это означает, что в коде присутствует опечатка - забыты круглые скобки.

Рассмотрим пример:

    int Foo();
    void Use()
    {
      if (Foo == 0)
      {
        //...
      }
    }

Условие "Foo == 0" не имеет смысла. Адрес функции 'Foo' всегда не равен нулю, а следовательно результатом сравнение всегда будет значение 'false'. В рассматриваемом коде случайно пропущены круглые скобки. Корректный вариант кода:

    if (Foo() == 0)
    {
      //...
    }

Если в коде явно написано взятие адреса функции, то такой код считается корректным. Пример:

    int Foo();
    void Use()
    {
      if (&Foo != NULL)
        //...
    }

Данная диагностика классифицируется как:

CWE-570 CWE-571 CERT-EXP16-C

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V516.