mod.std.c Digest V16#11
Orlando Sotomayor-Diaz
osd at hou2d.UUCP
Fri May 16 03:28:40 AEST 1986
From: Orlando Sotomayor-Diaz (The Moderator) <cbosgd!std-c>
mod.std.c Digest Thu, 15 May 86 Volume 16 : Issue 11
Today's Topics:
Cover Letter for MORE C standard differences
MORE C standard differences Apr85-Feb86, part 1 of 9
----------------------------------------------------------------------
Date:
From: ihnp4!utzoo!lsuc!msb
Subject: Cover Letter for MORE C standard differences
To: utzoo!ihnp4!hou2d!osd
This is the continuation of my earlier posting enumerating signi-
ficant differences between the April 30, 1985, and February 14,
1986, drafts of the proposed ANSI C Standard. This posting cov-
ers Part D and part of Part E. It did not seem worthwhile doing
the rest of Part E.
As before, what you see here does not include ALL of the differ-
ences between the versions. I have generally suppressed changes
that appeared to provide only a clearer wording, or to move some
text to a more appropriate heading. Some of these changes are
actually fairly substantial in extent. On the other hand, I have
included all changes that affect either C itself or the terminol-
ogy for talking about it ... except, of course, any that I
missed.
The changes are cited in the order of their appearance in the new
version, with a few slight exceptions to group related text. I
don't give a lot of context for each one, to keep the length of
this document manageable. Never assume that you are seeing a
complete paragraph. However, where I have elided important text
I have placed an ellipsis (...).
For changes that affect a small part of a paragraph, I have
adopted the notation {old text --> new text}, which is simply run
in line. Each line containing the start of at least one such
change is starred in the left margin. The old or new text may be
null: thus, the change to the description of ptrdiff_t in section
D.1.1 consists of the insertion of the word "signed". In such a
paragraph, the words not enclosed in braces may be unchanged from
April 1985 to February 1986, or they may have changed in a minor
way, as described above, in which case I am showing the new ver-
sion.
For larger changes, I give what are generally complete paragraphs
or blocks of paragraphs, showing old and new forms separately.
The notation "<--O" in the left margin means that this paragraph
has been deleted or replaced; "N-->" refers to its replacement or
an added paragraph.
Since the typographical changes of the actual document are not
available here, I have rendered some of them in punctuation and
omitted others. (In particular, "quotation marks" in this arti-
cle more often than not represent italics in the original and
thus a definition of a term.)
Paragraphs marked Remark are mine.
Mark Brader - ihnp4!utzoo!lsuc!msb
------------------------------
Date:
From: ihnp4!utzoo!lsuc!msb
Subject: MORE C standard differences Apr85-Feb86, part 1 of 9
To: utzoo!ihnp4!hou2d!osd
# D.1 INTRODUCTION {<stdefs.h> --> <stddef.h>}
# D.1.1 Terms and common definitions
N--> A "letter" is a character in the execution character set
N--> corresponding to any of the 52 required lower-case and upper-case
N--> letters in the source character set, listed in #B.2.1.
# D.1.1 Terms and common definitions
<--O A "null pointer" is a pointer of appropriate type whose value
<--O compares equal to that of an integral constant expression with
<--O the value 0.
# D.1.1 Terms and common definitions
The following types and macros ... are also defined in a common
* standard header, {<stdefs.h> --> <stddef.h>}.
The types are
ptrdiff_t
* which is the {--> signed} integral type of the result of sub-
tracting two pointers; and
size_t
* which is the {--> unsigned} integral type of the result of the
sizeof operator.
The macros are
NULL
* which expands to {a constant expression whose value compares
equal to that of an integral constant expression with the value
0, which can be assigned to a pointer or used as an argument to
represent the null pointer --> an implementation-defined null
pointer constant}; and
errno
* which expands to {an lvalue expression --> a modifiable lvalue}
* that designates {an int --> a volatile integer} which is set to a
positive error code by several library functions. ...
N--> The macro errno need not be the identifier of an object. It
N--> might be a modifiable lvalue resulting from a function call (for
N--> example, *_errno()).
# D.1.2 Headers
* Each library function {or object -->} is {associated with --> de-
clared in} a "header" ... made available via ... #include ...
* The header declares a set of related functions {and objects -->},
* plus any necessary types and additional {#define -->} macros
needed to facilitate their use.
Remark: The draft no longer refers to headers declaring any ob-
jects; this is a general change and will not be mentioned again.
# D.1.2 Headers
<--O An implementation may define macros whose names begin with two or
<--O more underscores, even if no headers are explicitly included.
# D.1.2 Headers
The standard headers are ...
N--> <float.h>
...
* {<stdefs.h> --> <stddef.h>}
# D.1.2 Headers
* Headers ... may be included more than once {--> in a given
scope}, with no effect different from being included only once.
# D.1.3 Use of library functions
Any function declared in a header may be implemented as a macro
defined in the header,
<--O so it is generally not safe to declare or take the address of a
<--O library function or object.
N--> so a library function should not be declared explicitly if its
N--> header is included. Any macro definition of a function can be
N--> suppressed locally by enclosing the name of the function in
N--> parentheses, because the name is then not followed by the left
N--> parenthesis that indicates expansion of a macro function name.
N--> For the same syntactic reason, it is permitted to take the ad-
N--> dress of a library function even if it is also defined as a mac-
N--> ro.
* The use of #undef to remove any macro definition will {--> also}
ensure that an actual function is referenced.
# D.1.3 Use of library functions
N--> If a function that accepts a variable number of arguments is not
N--> declared (explicitly or by including its associated header), the
N--> behavior is undefined.
# D.1.3 Use of library functions
... assuredly generating a true function reference ...
#include <stdlib.h>
#undef atoi
/*...*/
i = atoi(str);
N--> or
N--> #include <stdlib.h>
N--> /*...*/
N--> i = (atoi)(str);
# D.1.3 Use of library functions
... the appropriate header could specify
#define abs(x) _builtin_abs(x)
for a compiler whose code generator will accept it.
In this manner, a user desiring to guarantee that a given library
function such as abs will be a genuine function may write
#undef abs
whether the implementation's header provides a macro implementa-
* tion of abs or a builtin implementation. {--> The prototype for
the function, which precedes and is hidden by any macro defini-
tion, is thereby revealed also.}
------------------------------
End of mod.std.c Digest - Thu, 15 May 86 13:28:03 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