Thread View: mod.std.c
1 messages
1 total messages
Started by Orlando Sotomayor-Diaz
Sun, 11 May 1986 11:28
mod.std.c Digest V16#6
Author: Orlando Sotomayor-Diaz
Date: Sun, 11 May 1986 11:28
Date: Sun, 11 May 1986 11:28
221 lines
9750 bytes
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