On Sat, Jul 29, 2006 at 07:33:03PM -0400, Simon Boulet wrote:
> After a couple hours debugging code, I figured our an if() somewhere
> had a trailing ; like this:
>
> if (memcmp(p, COMMUNITY, strlen(COMMUNITY)) != 0);
> continue; /* failed */
>
> The code above will always reach "continue" even when memcmp() == 0.
>
> I was surprised to see gcc doesn't report anything, I would expect a
> "statement has no effect" warning.
But it is common to have an empty action on a condition. You'll often
see code like
if (condition)
/* nothing */;
or more usually
if (condition) {
/* nothing */;
}
or even more usually
if (condition) {
INVOKE_MACRO(...);
}
where the macro might be null on some platforms. Because projects
often use -Wall -Werror, I'd worry about introducing a warning without
more information about the effect.