mod.std.c Digest V6#11
Orlando Sotomayor-Diaz
osd7 at homxa.UUCP
Wed May 29 19:29:19 AEST 1985
From: Orlando Sotomayor-Diaz (The Moderator) <cbosgd!std-c>
mod.std.c Digest Wed, 22 May 85 Volume 6 : Issue 11
Today's Topics:
concatenation
Pointer math and ints (2 msgs)
signed and unsigned char, same size?
----------------------------------------------------------------------
Date: Tue, 21 May 85 11:27:53 edt
From: decvax!duke!george at idis
Subject: concatenation
To: duke!decvax!ihnp4!sfbc!lr at mcnc
Below is the definition of string literals
from section C.1.4 of X3J11 draft 85-008.
string-literal:
unit-string-literal
string-literal unit-string-literal
The below definition might be more useful.
string-literal:
unit-string-literal
string-literal unit-string-literal
string-literal character-constant
George Rosenberg
duke!mcnc!idis!george
------------------------------
Date: 19 May 85 16:26:34 CDT (Sun)
From: plus5!hokey (Hokey)
Subject: Pointer math and ints
>From C.3.6 Additive Operators (semantics), p. 21, draft 85-008:
> "When two pointers to members of the same array object are subtracted,
> the result is converted (by division by the size of the member) to
> a signed integer (the size of which is implementation defined)
> representing the difference of the subscripts of the two array
> members.
>
>K&R (p 189, last paragraph of 7.4) states "If two pointers to objects of
>the same type are subtracted, the result is converted (by division by
>the length of the object) to an _int_ representing the number of objects
>separating the pointed-to objects."
>
>Changing the result from "an _int_" to "a signed integer (the size of
>which is implementation defined)" breaks existing code.
>
>[ Someone can prove the above statement? -- Mod -- ]
I proved it in a later statement on the same article, paraphrased again:
An example of this problem (pointer==long, int==short) occurs when
one passes the (previously guaranteed to be an int) "p-s" as an actual
parameter to a subroutine, which is expecting an int. Under the proposed
definition, the "p-s" expression pushes a long on the stack, but the
subroutine expects a short.
[ See more on K&R on article below. -- Mod -- ]
Jack Jansen: I *never said* pointers had to fit into an int. I am not
saying it now. I *am* saying that if the result of (valid) pointer
subtraction is of arbitrary integral size instead of int, existing code
will break and it will be *hard* to find these problems.
Most current Macintosh C compilers have 4 byte pointers and longs, and
2 byte shorts and ints. Every one of these compilers puts the result
of (valid) pointer subtraction into a *long* instead of an *int*.
This means that when I try and pass the (int) length of a string to a
subroutine via pointer subtraction, 4 bytes are generated instead of 2.
Are there still people who don't see the problem?
------------------------------
Date: Tue, 21 May 85 13:07:30 edt
From: ima!haddock!ism780!ico!spence
Subject: Pointer math and ints
To: ima!cbosgd!std-c
On the subject of pointer subtraction, K&R is misleading.
((&a[1] - &a[0]) / sizeof( a[0] )) would compute one object "separating
the pointed-to objects" when in fact the two objects are adjacent.
It also has the problem of potentially indicating a negative number of
intervening objects. The proposed definition provides more information
and is more precise.
Spencer Rugaber (ima!spence)
------------------------------
Date: Tue, 21 May 85 13:07:30 edt
From: ima!haddock!ism780!ico!spence
Subject: signed and unsigned char, same size?
To: ima!cbosgd!std-c
I was asked by a friend the other day whether it was safe to store an
unsigned char into a char. The general problem is whether signed and
unsigned objects (of the same variety char/short/int/long) are guaranteed
to be the same size. I could find no discussion of the question in K&R
and can recall none from the proposed standard. It seems like a
question that the standard could reasonable speak to.
Spencer Rugaber (ima!spence)
[ Hope this helps.
"For signed char and each type of int, there is a corresponding
unsigned type (declared with the keyword unsigned) that
occupies the same amount of storage."
Section C.1.2.5 Types, p. 16, Draft 85-045 (4/30/85) --
-- Mod -- ]
------------------------------
End of mod.std.c Digest - Wed, 22 May 85 21:25:42 EDT
******************************
USENET -> posting only through cbosgd!std-c.
ARPA -> ... through cbosgd!std-c at BERKELEY.ARPA (NOT to INFO-C)
In all cases, you may also reply to the author(s) above.
More information about the Mod.std.c
mailing list