I've inherited a sizeable codebase where someone, somehow, has written several conditionals like so:
enum
{
FOO_TYPE_A,
FOO_TYPE_B,
FOO_TYPE_C,
FOO_TYPE_D
};
void bar(int fooType)
{
if (fooType == FOO_TYPE_A || FOO_TYPE_B) // <-- This will always be true, since FOO_TYPE_B is nonzero!
{
// Do something intended for only type A or B
}
// Do things general to A,B,C,D
}
where the condition check should clearly be:
if (fooType == FOO_TYPE_A || fooType == FOO_TYPE_B)
Is there a warning in gcc I can turn on to find them all, similar to MSDN's C4127?
Specifically, I'm using the Android NDK r9d.
If not, why not? It seems like a useful catch-all for unintentional assignment, unsigned > 0 as well as the above foolishness.
EDIT: Made the code more verbose to illustrate the problem.