Phooey on Portability
Gregory Smith
greg at utcsri.UUCP
Fri Nov 7 14:58:07 AEST 1986
In article <5225 at brl-smoke.ARPA> T-RELAY.ARPA>@brl-smoke.ARPA writes:
>I'd like to get at the byte stored in memory location 6. So I just
>
>struct {
> char byte;
> int word;
> long longword;
>} *MEMORY;
>
>main(){char mybyte = 6->byte;}
>
>No sweat. Works like a charm daily.
wrong, Wrong, WRONG! I won't try to correct the weirdnesses above since
I can't really see what you're doing. What are 'word' and 'longword' for ???
It's done like this:
mybyte = * ( char * ) 6;
> But what do I do on segmented memory
>systems like the PC?
>
>main(){char mybyte = 0:6->byte;}
Easy. *( char * ) 6.
On a hideous machine like the 8088, (char *)6 *should* yield a pointer
to the absolute address 6, in whatever pointer format is used in
the 'memory model'(barf) you are using. Thus *(char *)6 *should* be
an lvalue which is stored at that absolute address. Whether this happens or
not is up to whichever masochist wrote the compiler.
>
>So much of the squirming about lvalues and chars and the like
>comes from both wanting to be memory system independent and close the metal.
>Why don't we just say that every compiler writer should include a section
>in the manual called "Memory Model" wherein the following things are defined?
Yes. This section should list the things that *will* work on that
implementation, but which you shouldn't use ( unless you are writing
device drivers ) because they won't port. It should then
give you equivalent portable methods.
>I personally want to snuggie right up the memory system in my C programs.
Do you want to play with segment registers in your C code ( shudder )?
>That's why I chose C! I really have plenty to worry about besides machines
>I'm NOT trying to program. I guess what I'm saying is that until we can
>create well-engineered, reliable code for one machine why are we wasting
>our time worrrying about doing it for all machines at once?
Because it's not that much harder, once you get used to it.
Who says we can't create reliable, well-engineered code? I have.
It takes less *extra* time to make something portable than it takes
to go through and hack it up if you do have to port it. It does happen.
>In other words,
>portability is mostly a red herring. Good code on one machine beats
>bad code on many machines every time.
>
Great! so why not write good code which is portable? It is mostly the
'messy' stuff that causes portability problems anyway.
--
----------------------------------------------------------------------
Greg Smith University of Toronto UUCP: ..utzoo!utcsri!greg
Have vAX, will hack...
More information about the Comp.lang.c
mailing list