Messages in this thread | | | Subject | Re: [BUG] Bad #define, nonportable C, missing {} | From | (Eric W. Biederman) | Date | 21 Nov 2001 07:33:31 -0700 |
| |
"Richard B. Johnson" <root@chaos.analogic.com> writes:
> On Wed, 21 Nov 2001, Jan Hudec wrote: > > > > > *a++ = byte_rev[*a] > > > It looks perferctly okay to me. Anyway, whenever would you listen to a > > > C++ book talking about good C coding :p > > > > It's simple. If any object is modified twice without an intervening > sequence point, the results are undefined. The sequence-point in > > *a++ = byte_rev[*a]; > > ... is the ';'. > > So, we look at 'a' and see if it's modified twice. It isn't. It > gets modified once with '++'. Now we look at the object to which > 'a' points. Is it modified twice? No, it's read once in [*a], and > written once in "*a++ =". > > So, it's perfectly good code with a well defined behavior as far as > 'C' is concerned.
Nope. In particular it isn't defined if [*a] is evaluated before or after a++ is evaluated.
> I think it is ugly, however, the writer probably > thought it was beautiful. If somebody went around and fixed all > the ugly code, it would still be ugly in someone else's eyes.
True, but not significant. You can find a set of people whose opinion matters (say core kernel maintainers) and not have that looks ugly in their eyes. In any case broken code is broken.
Eric - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |