bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sharutils-4.11.1] Compilation warnings


From: Bruce Korb
Subject: Re: [sharutils-4.11.1] Compilation warnings
Date: Thu, 06 Dec 2012 18:09:41 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121025 Thunderbird/16.0.2

On 12/06/12 16:29, Eric Blake wrote:
> You can also shut up the compiler by doing tricks like
>  strstr((const char *)expr, "")
> although I'm not sure they are worth it.

For other applications, I use C:

  #define C(_t, _v)  ((_t)(void *)(_v))

but here I will just directly add the dual layered casting because
it comes from text that gets inserted into other people's programs.

WRT:  using "%lu" for uint64_t formatting:

> ... The only portable solution here is to cast to '[u]intmax_t'.

What is the correct formatting element?  I can't quite figure that out.
If it is variable (i.e. sometimes "%lu" and sometimes "%llu"), I'm
still hosed.  Maybe just cast it to "unsigned int" and print the wrong
value on 16 bit platforms with 32 bit pids. :)

WRT: unused return value

> To warn you that you are blatantly ignoring the chance of failure.

If I've cast it to void, then it is pretty likely I am very much not
interested in what the compiler has to say:

>> If the command succeeds, cool.  If not, there's nothing I can do about it 
>> but ignore it.

> Then use the gnulib module ignore-value,

Yep.  Paul mentioned it, too.

>  ignore_value(system(fil_name))
> if you really are absolutely positive that there is no reasonable
> message to write to stderr if the command fails to run.  But I suspect
> that you really have a bug, and SHOULD be caring about system() failure.

I am certain there is nothing reasonable to do.

>> Consequently, the value is valueless.  If the compiler is going to complain 
>> about
>> an unused value when that value is explicitly cast to void, then it is a 
>> compiler bug.
> 
> Yes, we (aka gnulib writers) have argued that point with gcc developers
> in the past, and the gcc guys argued back that the GNU Coding Standards
> discourage cast-to-void and so their choice to not treat cast-to-void as

I had guessed that was the case.  The GCC guys violate a different principle
that I put above "GNU Coding Standards":  the programmer knows better than
the tool.  Any tool insisting that it knows better than a user explicitly
saying, "I want to use it this way" is wrong.  Period.  But I'm not quite
Quixotic enough to go charging off on that one again. :)

> Besides, ignore_value(system(foo)) does look better than
> (void)system(foo),

different people have different senses of aesthetics.
Anyway, very long story short, I'll add in the ignore-value module.
Thank you!  Regards, Bruce



reply via email to

[Prev in Thread] Current Thread [Next in Thread]