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

Code contains a construct comparing a non-null pointer to a function with null. It is most probably that there is a misprint in code – parentheses are missing.

Consider this example:

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

The condition "Foo == 0" is meaningless. The address of the 'Foo' function never equals zero, so the comparison result will always be 'false'. In the code we consider, the programmer missed parentheses by accident. This is the correct version of the code:

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

If there is an explicit taking of address, the code is considered correct. For example:

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

This diagnostic is classified as:

CWE-570 CWE-571 CERT-EXP16-C

You can look at examples of errors detected by the V516 diagnostic.