On 14/06/16 10:32, Florian Weimer wrote:
A long time ago, GCC decided that warn_unused_result warnings should *not* be
silenced by casting to void, as in:

   (void) write (STDOUT_FILENO, message, strlen (message));

Apparently, programmers have figured out to use this idiom as a replacement:

   if (write (STDOUT_FILENO, message, strlen (message))) { }

I'm not sure if this is an improvement.  The (void) idiom seems to make the
programmer intention more explicit.

Maybe it's time to reconsider and suppress the warning for casts to (void), too?

There is a thorough discussion and some analysis here:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425

I think most of the pushback against the (void) idiom has actually come from GNU libc in the past.

One possible solution, if both behaviours are desired, is to warn for the void idiom only for a new -Wstrict-unused-result, such that:

write (STDOUT_FILENO, message, strlen (message));
// warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
(void) write (STDOUT_FILENO, message, strlen (message));
// warning: ignoring return value of ‘foo’, declared with attribute warn_unused_result [-Wstrict-unused-result]

and -Wno-strict-unused-result disables warnings for (void).

But perhaps it is simpler to just change the default. It seems unlikely to use (void) unintentionally.

Cheers,

        Manuel.

Reply via email to