[Toybox] PM: code style, was: Re: New Subscriber
Rob Landley
rob at landley.net
Wed Feb 15 04:10:38 PST 2012
On 02/12/2012 06:07 PM, Frank Bergmann wrote:
> Hi,
>
> On Sat, Feb 11, 2012 at 02:28:15PM -0600, Rob Landley wrote:
> [...]
>> execution units busy are much happier with:
>> x = 42;
>> if (blah) x = 37;
>> Than with:
>> x = blah ? 42 : 37.
>
> ... at least it is better readable if you use this nice kernel macros
> __likely() and unlikely(). ;-)
The kernel is always running when any program does, so
micro-optimizations they do affect every single load you ever run. The
kernel guys have a huge incentive to microoptimize... and then undo it
again when their microoptimizations bitrot:
http://lwn.net/Articles/419102/
http://lwn.net/Articles/404103/
http://lwn.net/Articles/444336/
http://lwn.net/Articles/166172/
I like to be aware of this sort of thing so I don't gratuitously screw
it up, but I don't want to try to micromanage the compiler because
different builds (for different chips with different compiler versions)
need different things.
>>> Are you sure? For K&R I'm sure that it is but IMHO c99 "requires" the
>>> usage of void in this case (using char** as char*).
>>
>> Can you point me to where in the spec?
>
> Did I wrote "IMHO"? ;-) K&R IMHO doesn't know anything about void. A
> pointer char* was the universal pointer which may be "converted" (without
> explicit casting) to any other pointer and vice versa. C99 (and the
> standard before it) IMHO introduced void at least for this role. And IMHO
> a non-explicit cast is only allowed for void* and not for char* anymore.
This is the _compiler_ goign overboard with microoptimizations, if you
ask me. I treat it the same way I treat the "may be used uninitialized,
even though it isn't in this case" warning. (Which you can apparently
disable with "int x=x;" in your declarations, which is a syntax
specifically to tell it to shut up about that, but still way too magic
for my tastes.)
Rob
More information about the Toybox
mailing list