V516. Consider inspecting an odd expression. Non-null function pointer is compared to null

30.05.2012

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)
    //...
}
You can look at examples of errors from real projects which were detected by this diagnostic message.