Structures
Michael Meissner
meissner at osf.org
Fri Mar 2 08:35:41 AEST 1990
In article <14302 at reed.UUCP> minar at reed.bitnet (Nelson Minar,(???)) writes:
| My copy of K&R 1 (I'll be getting 2 soon..) says
|
| "There are only two things that can be done with a structure or a union:
| name one of its members (by means of the . operator); or take its address
| (by unary &). Other operations, such as assigning from or to it or passing
| it as a parameter, draw an error message. In the future, it is expected
| that these operations, but not necessarily others, will be allowed."
|
| 1] What does ansi say about this?
ANSI requires that implementations be able to pass structures by
value, return them, and assigning structures. Note that the maximum
size of a structure that you can pass is implementation defined. For
example, unless they've changed the calling sequence recently, on a
VAX, the size of all of the arguments must be less than 512 longwords
(or bytes, I don't use vaxen).
| 2] It seems that passing a structure-by-value is illegal under this rule.
| Why this limitation in the original C?
Possibly because the PDP11 did not have a block move instruction, or
possibly Dennis Ritchie hadn't gotten around to it when K&R-I was
written. The changes mentioned in #1, were made after K&R-I, but
before V7 was shipped outside of Bell Labs. The same change added
enum's.
| 3] My C compiler (Turbo C 2.0) doesn't mind passing a structure-by-value,
| and it allows you to set two structures equal to each other, automatically
| copying the elements. Is this standard behavior for most C compilers? Why
| does Turbo C have an <optional> warning "Warning: structure passed by value"
| if it is legal TC 2.0 code? Because it is potentially non-portable?
The warning message is probably because the usage is not allowed by
K&R (though most compilers do support it).
--
Michael Meissner email: meissner at osf.org phone: 617-621-8861
Open Software Foundation, 11 Cambridge Center, Cambridge, MA
Catproof is an oxymoron, Childproof is nearly so
More information about the Comp.lang.c
mailing list