🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Orlando Sotomayor-Diaz Sun, 11 May 1986 11:34
mod.std.c Digest V16#7
#127
Author: Orlando Sotomayor-Diaz
Date: Sun, 11 May 1986 11:34
224 lines
9195 bytes
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.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads