cpplib: Documentation update.
Neil Booth
NeilB@earthling.net
Fri Oct 27 16:47:00 GMT 2000
Fixes many spelling mistakes, and adds more detail to a couple of places.
Neil.
* cpp.texi: Update.
Index: cpp.texi
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cpp.texi,v
retrieving revision 1.33
diff -u -p -r1.33 cpp.texi
--- cpp.texi 2000/10/25 17:23:23 1.33
+++ cpp.texi 2000/10/27 23:44:46
@@ -2379,13 +2379,14 @@ understand @code{sizeof}, or typedef nam
such as @code{int}.)
@findex defined
-The special operator @samp{defined} is used in @samp{#if} expressions to
-test whether a certain name is defined as a macro. Either @samp{defined
-@var{name}} or @samp{defined (@var{name})} is an expression whose value
-is 1 if @var{name} is defined as macro at the current point in the
-program, and 0 otherwise. For the @samp{defined} operator it makes no
-difference what the definition of the macro is; all that matters is
-whether there is a definition. Thus, for example,@refill
+The special operator @samp{defined} is used in @samp{#if} and
+@samp{#elif} expressions to test whether a certain name is defined as a
+macro. Either @samp{defined @var{name}} or @samp{defined (@var{name})}
+is an expression whose value is 1 if @var{name} is defined as macro at
+the current point in the program, and 0 otherwise. To the
+@samp{defined} operator it makes no difference what the definition of
+the macro is; all that matters is whether there is a definition. Thus,
+for example,@refill
@example
#if defined (vax) || defined (ns16000)
@@ -2405,6 +2406,12 @@ use of the @samp{defined} operator retur
longer defined. If the macro is defined again with another
@samp{#define}, @samp{defined} will recommence returning 1.
+If the @samp{defined} operator appears as a result of a macro expansion,
+the C standard says the behavior is undefined. GNU cpp treats it as a
+genuine @samp{defined} operator and evaluates it normally. It will warn
+wherever your code uses this feature if you use the command-line option
+@samp{-pedantic}, since other compilers may handle it differently.
+
@findex #ifdef
@findex #ifndef
Conditionals that test whether a single macro is defined are very common,
@@ -2793,29 +2800,31 @@ This indicates that the following text s
@end table
@node Implementation, Unreliable Features, Output, Top
-@section Implementation-defined Behavior and Implemenation Limits
+@section Implementation-defined Behavior and Implementation Limits
@cindex implementation limits
@cindex implementation-defined behavior
The ISO C standard mandates that implementations document various
aspects of preprocessor behavior. You should try to avoid undue
-reliance on behaviour described here, as it is probable that it will
+reliance on behaviour described here, as it is possible that it will
change subtly in future implementations.
@itemize @bullet
-@item The mapping of physical source file multibyte characters to the execution
-character set.
+@item The mapping of physical source file multi-byte characters to the
+execution character set.
-Currenty, GNU cpp only supports character sets that are strict supersets
+Currently, GNU cpp only supports character sets that are strict supersets
of ASCII, and performs no translation of characters.
@item Non-empty sequences of whitespace characters.
Each whitespace sequence is not preserved, but collapsed to a single
-space.
+space. For aesthetic reasons, the first token on each non-directive
+line of output is preceded with sufficient spaces that it appears in the
+same column as it did in the original source file.
-@item The numeric value of characeter constants in preprocessor expressions.
+@item The numeric value of character constants in preprocessor expressions.
The preprocessor interprets character constants in preprocessing
directives on the host machine. Expressions outside preprocessing
@@ -2824,6 +2833,16 @@ normal case of a native compiler, these
and so character constants will be evaluated identically in both cases.
However, in the case of a cross compiler, the values may be different.
+Multi-character character constants are interpreted a character at a
+time, shifting the previous result left by the number of bits per
+character on the host, and adding the new character. For example, 'ab'
+on an 8-bit host would be interpreted as 'a' * 256 + 'b'. If there are
+more characters in the constant than can fit in the widest native
+integer type on the host, usually a @samp{long}, the behavior is
+undefined.
+
+Evaluation of wide character constants is not properly implemented yet.
+
@item Source file inclusion.
For a discussion on how the preprocessor locates header files,
@@ -2858,17 +2877,17 @@ The following documents internal limits
@item Nesting levels of @samp{#include} files.
We impose an arbitrary limit of 200 levels, to avoid runaway recursion.
-The standard requires at least 15 levels be permitted.
+The standard requires at least 15 levels.
@item Nesting levels of conditional inclusion.
The C standard mandates this be at least 63. The GNU C preprocessor
is limited only by available memory.
-@item Levels of paranthesised expressions within a full expression.
+@item Levels of parenthesised expressions within a full expression.
The C standard requires this to be at least 63. In preprocessor
-conditional expresssions it is limited only by available memory.
+conditional expressions it is limited only by available memory.
@item Significant initial characters in an identifier or macro name.
@@ -2880,7 +2899,7 @@ requires only that the first 63 be signi
The standard requires at least 4095 be possible; GNU cpp is limited only
by available memory.
-@item Number of paramters in a macro definition and arguments in a macro call.
+@item Number of parameters in a macro definition and arguments in a macro call.
We allow USHRT_MAX, which is normally 65,535, and above the minimum of
127 required by the standard.
@@ -2956,7 +2975,7 @@ Formerly, in a macro expansion, if @samp
arguments parameter, and the set of tokens specified for that argument in
the macro invocation was empty, previous versions of the GNU C
preprocessor would back up and remove the preceding sequence of
-nonwhitespace characters (@strong{not} the preceding token). This
+non-whitespace characters (@strong{not} the preceding token). This
extension is in direct conflict with the 1999 C standard and has been
drastically pared back.
@@ -2995,7 +3014,7 @@ used at all.
@item #pragma poison
-This pragma has been superceded by @samp{#pragma GCC poison}.
+This pragma has been superseded by @samp{#pragma GCC poison}.
@xref{Poisoning}.
@item Multi-line string literals in directives
@@ -3531,7 +3550,7 @@ The 1999 C standard plus GNU extensions.
@item -ftabstop=NUMBER
@findex -ftabstop
-Set the distance between tabstops. This helps the preprocessor
+Set the distance between tab stops. This helps the preprocessor
report correct column numbers in warnings or errors, even if tabs appear
on the line. Values less than 1 or greater than 100 are ignored. The
default is 8.
More information about the Gcc-patches
mailing list