Messages in this thread | | | From | (Philippe Strauss) | Subject | Re: Reverse the ucdrom.h patch in 2.1.12 | Date | Sat, 23 Nov 1996 00:24:09 +0100 (MET) |
| |
Linus Torvalds wrote: >
[snip]
> Hmm.. Personally, I consider pointer casts a bug by default, which was why > I applied the non-cast version instead. > > If pointer casts are needed, I'd much prefer them done through another > interface, one such being for example: > > initialize_cdrom(capacity,speed); > > with initialize_cdrom() being a inline function or whatever that then does > the casting. > > The _reason_ I consider pointer casts a bug is that they mess with the C > type checking. "What type checking?" I hear you say.. But in fact C type > checking is very practical if done correctly, and one reason I use "-Wall" > with gcc for everything I write. If the stuff is ever changed (to use > "long" for example), the code that uses casts will never result in a > compiler warning, yet it will be hopelessly incorrect unless fixed. > > Now, a inline function that does the same cast results in the same _code_, > but then the cast is hidden in one place (and if the inline function is > placed near enough the definition of the types, anybody who changes the > type is likely to change the inline function to mess with the type as > well). > > If you think I'm looking for something like objects but without the > overhead of a object-oriented language, you're getting pretty close. > > Thought of the day: "Any interface that _requires_ the programmer to use > a cast is a bad interface". > > Anybody want to send me patches? > > Linus >
OK for me, but just one example of a good usage of pointer casting. Accessing a peripheral that may return value on 8 or 16 bits in its DMA buffer, such as a soundcard with DMA mmaping, is really beautiful. Depending on the resolution that you want, you cast the mmaped area form (void *) to (short *) or (char *). Yeap, this is still very marginal..
-- Philippe Strauss, CH-1092 Belmont
Email: <philippe.strauss@urbanet.ch> Homepage: http://sicel-home-1-4.urbanet.ch
| |