🚀 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:28
mod.std.c Digest V16#6
#126
Author: Orlando Sotomayor-Diaz
Date: Sun, 11 May 1986 11:28
221 lines
9750 bytes
From: Orlando Sotomayor-Diaz (The Moderator) <cbosgd!std-c>


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

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

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 5
To: cbosgd!std-c%utcsri

# C.3.0.1 Lvalues {--> and function locators}

  *    An "lvalue" is an expression that designates an object {and  that
  *    may  be  used  to  change its value -->}.  {--> When an object is
       said to have a particular type, the  type  is  specified  by  the
       lvalue used to designate the object.}

N-->   If an lvalue appears in a context other than as an  operand  that
N-->   may  or  shall be an lvalue, if it has array type it is converted
N-->   to a pointer as described in #C.2.2.1, otherwise it  is  replaced
N-->   by  the  value  of  the  designated  object.  In either case, the
N-->   result is not an lvalue.

N-->   A "modifiable lvalue" is an lvalue that does not have array  type
N-->   and does not have a type declared with the const type specifier.

N-->   A "function locator" is an expression that has function type.  If
N-->   a  function locator appears in a context other than as an operand
N-->   that may or shall be a function locator, it  is  converted  to  a
N-->   pointer  as  described in #C.2.2.1.  The result is not a function
N-->   locator.

  *    {Some operators yield lvalues. -->} The discussion of each opera-
  *    tor  {states if it expects --> identifies those that may or shall
  *    have an lvalue {-->,  modifiable  lvalue,  or  function  locator}
  *    operand, and {if it --> those that} yield an lvalue {--> or func-
       tion locator} result.

  *    ...  The name "lvalue" comes {--> originally} from the assignment
       expression  E1 = E2,  in  which  the  left  operand E1 must be an
  *    lvalue.  {--> It is perhaps better considered as representing  an
       object  "locator value".  What is sometimes called "rvalue" is in
       this Standard described as the "value of an expression".}

  *    An obvious example of an lvalue is an  identifier  {used  on  the
       left  side  of  an  assignment  operator --> of an object}.  As a
       further example, if E is a  unary  expression  that  has  pointer
       type,  *E  is  an  lvalue  that  designates the object to which E
       points.



# C.3.1 Primary expression

<--O   An identifier is a primary expression, provided it has been suit-
<--O   ably  declared  as discussed later.  Its type is specified by its
<--O   declaration, except for the conversions of function and array ex-
<--O   pressions  discussed  previously.   Because of these conversions,
<--O   function and array identifiers are not lvalues.

N-->   An identifier is a primary expression, provided it has  been  de-
N-->   clared as an object (in which case it is an lvalue) or a function
N-->   (in which case it is a function locator).

       A constant is a primary expression.   Its  type  depends  on  its
  *    form, as detailed {previously --> in #C.1.1.3}.

<--O   A string literal is a primary expression.  Its type is originally
<--O   "array of const char"; following the conversion rule given previ-
<--O   ously for arrays, this is converted to "pointer  to  const  char"
<--O   and  the  result  is  a  pointer  to the initial character in the
<--O   string literal.

N-->   A string literal is a primary expression.  It  is  an  lvalue  of
N-->   type "array of char", as detailed in #C.1.1.4.

  *    A parenthesized expression is a primary  ...   {The  presence  of
       parentheses  does not affect whether the expression is an lvalue.
       --> It is an lvalue if the unadorned expression is an lvalue,  or
       a  function locator if the unadorned expression is a function lo-
       cator.}



# C.3.2.1 Array subscripting

<--O   Usually,  the  first  expression  has  type   "array   of   TYPE"
<--O   (equivalently,  "pointer  to  TYPE"),  the subscript has integral
<--O   type, and the type of the result is "TYPE".

N-->   One of the expressions shall have type  "pointer  to  TYPE",  the
N-->   other  expression  shall  have  integral type, and the result has
N-->   type "TYPE".



# C.3.2.1 Array subscripting

  *    If E is an n-dimensional array ...  then E, {appearing in an  ex-
       pression  -->  used  as  other than an lvalue}, is converted to a
       pointer to an (n-1)-dimensional array ...  If the unary *  opera-
       tor  is  applied  to  this pointer explicitly, or implicitly as a
       result of subscripting,  the  result  is  the  pointed-to  (n-1)-
  *    dimensional  array, which is itself {immediately converted into a
       pointer --> converted into a pointer if used  as  other  than  an
       lvalue}.



# C.3.2.2 Function calls

  *    The {first expression --> expression preceding  the  parentheses}
  *    shall  have  type  {"function returning TYPE" or -->} "pointer to
  *    function returning TYPE" {--> (which could be the result of  con-
       verting a function locator)}.



# C.3.2.2 Function calls

N-->   If a function prototype declarator is in scope, the number of ar-
N-->   guments  shall  agree  with the number of formal parameters.  The
N-->   types shall be such that each formal parameter  may  be  assigned
N-->   the value of the corresponding argument.



# C.3.2.2 Function calls

  *    An argument may be {a function identifier or an  expression  that
       has  the  type of any object --> any expression other than a void
       expression}.  In preparing for the call to a function, each argu-
  *    ment  is  {assigned  to the corresponding formal parameter; thus,
       all argument passing is strictly by value --> evaluated, and each
       formal parameter is assigned the value of the corresponding argu-
       ment}.

  *    ...  If no {"function prototype" (a declaration that declares the
       types of the parameters) --> function prototype declarator} is in
       scope, the integral promotions are performed, and arguments  that
  *    have  type  float  are promoted to double.  {--> These are called
       the "default argument conversions".  If the number  of  arguments
       or  their  types  after conversion do not agree with those of the
       formal parameters, the behavior is undefined.}



# C.3.2.3 Structure and union members

       A postfix expression followed by a dot and an  identifier  desig-
  *    nates  a member of a structure or union {object --> entity}.  The
  *    value ... is an lvalue {if the first expression is an lvalue  and
       the  type of the member is not array or a type with the const at-
       tribute --> unless the first expression is the value returned  by
       a function call}.

       A postfix expression followed by an arrow ...  and an  identifier
       designates  a  member  of a structure or union object.  The value
  *    ... is an lvalue {if the type of the member is  not  array  or  a
       type with the const attribute -->}.

<--O   ...  If f is a function returning a structure or union, and x  is
<--O   a member of that structure of union, f().x is a valid postfix ex-
<--O   pression but is not an lvalue.



# C.3.2.4 Postfix increment and decrement operators

  *    The operand ... shall be a {--> modifiable} lvalue.  ...



# C.3.3.1 Prefix increment and decrement operators

  *    The operand ... shall be a {--> modifiable} lvalue.  ...



# C.3.3.2 Address and indirection operators

N-->   The operand of the unary & operator shall be a  function  locator
N-->   or  an lvalue that designates an object other than a bit-field or
N-->   an object declared with the register storage-class specifier.

  *    The operand of the unary * operator shall have pointer type {-->,
       other than pointer to void.}



# C.3.3.2 Address and indirection operators

       The unary * operator denotes indirection.  If the operand  points
  *    to a function, the result is {an expression by which the function
       can be called --> a function locator}; ...



# C.3.3.2 Address and indirection operators

  *    It is always true that if E is an lvalue {--> or  function  loca-
  *    tor}, *&E is an lvalue {--> or function locator} equal to E.

  *    If *P is an lvalue and T is the name of an {-->  object}  pointer
       type,  the  cast  expression *(T)P is an lvalue that has the same
       type as that to which T points.

  *    Forward references: cast operators (#C.3.4)  {-->,  storage-class
       specifiers (#C.5.1), structure and union specifiers (#C.5.2.1)}.

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

End of mod.std.c Digest - Sun, 11 May 86 07:27:01 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