[mod.std.c] mod.std.c Digest V16#7

osd@hou2d.UUCP (Orlando Sotomayor-Diaz) (05/11/86)

From: Orlando Sotomayor-Diaz (The Moderator) <cbosgd!std-c>


mod.std.c Digest            Sun, 11 May 86       Volume 16 : Issue   7

Today's Topics:
 Differences from April 1985 to February 1986 Draft Standard, Part 6
----------------------------------------------------------------------

Date: Sun, 27 Apr 86 01:17:06 est
From: <ihnp4!utcsri!lsuc!msb%utcsri>
Subject: Differences from April 1985 to February 1986 Draft Standard, Part 6
To: cbosgd!std-c%utcsri

# C.3.3.3 Unary arithmetic operators

  *    Except that it inhibits regrouping {--> of  subexpressions  of  E
       with   subexpressions   outside  of  E},  the  expression  +E  is
       equivalent to (0+E).



# C.3.3.4 The sizeof operator

<--O   The sizeof operator ... may be applied to  any  object  except  a
<--O   bit-field member of a structure, which is the only kind of object
<--O   whose size might not be an integral number of bytes.

N-->   The sizeof operator may not be applied to any expression that has
N-->   type  function,  bit-field, or void, or to the parenthesized name
N-->   of the type of such an expression.



# C.3.3.4 The sizeof operator

  *    The size is determined from the {declaration  -->  type}  of  the
  *    {object in the -->} operand {expression -->}, which is not itself
  *    evaluated.  The result is {an unsigned constant that has integral
       type  and may be used anywhere such a constant is required --> an
       integer constant}.  The size of  the  result  is  implementation-
  *    defined  {-->, and its type (an unsigned integral type) is size_t
       defined in the <stddef.h> header}.



# C.3.3.4 The sizeof operator

  *    When applied to a formal parameter that has array {-->  or  func-
  *    tion}  type, the sizeof operator yields the size of {a pointer to
       a member of such an array --> the pointer obtained by  converting
       as in #C.2.2.1}.



# C.3.3.4 The sizeof operator

<--O                       double *dp = alloc(sizeof (double));
<--O   ...






<--O                       sizeof(array)/sizeof(array[0])

N-->                       double *dp = alloc(sizeof *dp);
N-->   ...
N-->                       sizeof array / sizeof array[0]



# C.3.3.4 The sizeof operator

  *    Forward  references:  ...   {-->  terms  and  common  definitions
       (#D.1.1)}, ...



# C.3.4 Cast operators

  *    An {--> arbitrary} integer may be converted to  a  pointer.   {If
       the space provided was long enough, the mapping always carries an
       integer converted from a pointer back to the same pointer, but is
       otherwise --> The result is} implementation-defined.



# C.3.4 Cast operators

N-->   A cast does not yield an lvalue.



# C.3.6 Additive operators

       When two pointers to members of the same array  object  are  sub-
       tracted  ...   the  size  of the result is implementation-defined
  *    {-->, and its type (a signed integral type) is ptrdiff_t  defined
       in the <stddef.h> header}.



# C.3.9 Equality operators

       Both of the operands may have arithmetic type,  or  both  may  be
  *    pointers  to  the same type.  In addition, {--> one may be an ob-
       ject pointer and the other a pointer to void, or} one  may  be  a
  *    pointer  and  the other {an integral constant expression with the
       value 0 --> a null pointer constant}.

N-->   ...  If one of the operands is a pointer to void,  the  other  is
N-->   converted to that type.



# C.3.15 Conditional operator

       Both the second and third operands shall have arithmetic type, or
       shall  have  the same structure, union, or pointer type, or shall
  *    be void expressions.  In addition, {-->  one  may  be  an  object
       pointer and the other a pointer to void, or} one may be a pointer
  *    and the other {an integral constant expression with the  value  0
       --> a null pointer constant}.

N-->   ...  If one of the operands is  a  pointer  to  void,  the  other
N-->   operand is converted to that type and the result has that type.

N-->   A conditional expression does not yield an lvalue.



# C.3.16 Assignment operators

  *    An assignment operator shall have a {-->  modifiable}  lvalue  as
       its left operand.

  *    An assignment operator stores a value in the object {specified by
       the  lvalue  -->  designated by the left operand}.  An assignment
       expression has the type of the left operand and the value of  the
  *    left operand after the assignment {-->, but is not an lvalue}.



# C.3.16.1 Simple assignment

<--O   The operands may each have arithmetic type or may be structure or
<--O   union  objects  that  have  the same type.  In addition, the left
<--O   operand may be a pointer, in which case the right operand must be
<--O   a  pointer  that has the same type or has type "pointer to void",
<--O   or must be an integral constant expression with the value 0.

N-->   Both the operands shall have arithmetic type or  shall  have  the
N-->   same structure, union, or pointer type.  In addition, if the left
N-->   operand is a pointer, either of the operands may be a pointer  to
N-->   void, or the right operand may be a null pointer constant.

  *    ...  If the left operand is a pointer {and the right  operand  an
       integral  constant  expression  with the value 0, the constant is
       converted into a null pointer -->, if either of the operands is a
       pointer  to void or the right operand is a null pointer constant,
       the right operand is converted to the type of the left operand}.



# C.3.17 Comma operator

N-->   A comma operator does not yield an lvalue.



# C.4 CONSTANT EXPRESSIONS

       A function-call operator (), an increment or  decrement  operator
  *    ++ or --, {an indirection * unary operator, -->} or an assignment
       operator shall not appear in any constant expression.

       ...  The array-subscripting [] and member-access . and ->  opera-
  *    tors  and the "address-of" & {--> and indirection *} unary opera-
  *    tors shall not appear {,--> except in an expression that  is  the
       operand of a sizeof operator}.

<--O   For constant expressions in initializers, in addition to integral
<--O   constant  expressions  as  discussed previously, one can also use
<--O   floating constants and arbitrary casts and can apply the unary  &
<--O   operator  to objects that have static storage duration and to ar-
<--O   rays that have static storage duration subscripted  with  an  in-
<--O   tegral  constant  expression.   The unary & operation can also be
<--O   implied by appearance of a function identifier or an unsubscript-
<--O   ed array identifier.  In short, the expression must evaluate to a
<--O   constant, to the identifier or a previously declared function, or
<--O   to  the  address  of a previously declared object that has static
<--O   storage duration plus or minus an integral  constant  expression,
<--O   or  to the difference in addresses of two previously declared ob-
<--O   jects that are members of the same aggregate.

N-->   For constant expressions in initializers, in addition to integral
N-->   constant  expressions as discussed previously, floating constants
N-->   and arbitrary casts may be used.  Lvalues of  objects  that  have
N-->   static  storage duration or function identifiers may also be used
N-->   to specify addresses, explicitly with the unary & operator or im-
N-->   plicitly for unsubscripted array identifiers or function identif-
N-->   iers.  A constant difference in the addresses of two  members  of
N-->   the  same  aggregrate may be used.  As a special case, a suitably
N-->   cast null pointer may be used to derive an integral constant  ex-
N-->   pression, the value of which is the offset in bytes of an element
N-->   of a structure from its beginning, by means of an  expression  of
N-->   the form

N-->               (int)&((TYPE-SPECIFIER)0)->POSTFIX-EXPRESSION

N-->   where TYPE-SPECIFIER specifies the type of a pointer to a  struc-
N-->   ture  and POSTFIX-EXPRESSION designates any member of that struc-
N-->   ture or of a subaggregate (any array subscript shall  be  an  in-
N-->   tegral constant expression).

------------------------------

End of mod.std.c Digest - Sun, 11 May 86 07:34:03 EDT
******************************
USENET -> posting only through cbosgd!std-c.
ARPA -> ... through cbosgd!std-c@BERKELEY.ARPA (NOT to INFO-C)
In all cases, you may also reply to the author(s) above.