Various small fixes.

* c.texi (Lvalues): Dereferencing fn ptr is not an lvalue.
String constant is an lvalue.
Array constructor is an lvalue.
(Write Assignments Separately): Minor cleanup.
(Integer Variations): State minimum sizes of numeric types.
(Unicode Character Codes): Explain invalid universal character names.
(Structures): Define "compound type" and index it.
This commit is contained in:
Richard Stallman 2024-01-30 20:29:54 -05:00
parent db3b2f364c
commit 61fc722320
2 changed files with 37 additions and 14 deletions

View File

@ -1,3 +1,13 @@
2024-01-30 Richard Stallman <rms@gnu.org>
* c.texi (Lvalues): Dereferencing fn ptr is not an lvalue.
String constant is an lvalue.
Array constructor is an lvalue.
(Write Assignments Separately): Minor cleanup.
(Integer Variations): State minimum sizes of numeric types.
(Unicode Character Codes): Explain invalid universal character names.
(Structures): Define "compound type" and index it.
2024-01-12 Richard Stallman <rms@gnu.org> 2024-01-12 Richard Stallman <rms@gnu.org>
* c.texi: fix typos. * c.texi: fix typos.

41
c.texi
View File

@ -2646,7 +2646,7 @@ A variable.
@item @item
A pointer-dereference expression (@pxref{Pointer Dereference}) using A pointer-dereference expression (@pxref{Pointer Dereference}) using
unary @samp{*}. unary @samp{*}, if its type is not a non-function type.
@item @item
A structure field reference (@pxref{Structures}) using @samp{.}, if A structure field reference (@pxref{Structures}) using @samp{.}, if
@ -2665,7 +2665,13 @@ An array-element reference using @samp{[@r{@dots{}}]}, if the array
is an lvalue. is an lvalue.
@item @item
A structure or union constructor. A string constant (@pxref{String Constants}).
@item
An array constructor (@pxref{Constructing Array Values}).
@item
A structure or union constructor (@pxref{Structure Constructors}).
@end itemize @end itemize
If an expression's outermost operation is any other operator, that If an expression's outermost operation is any other operator, that
@ -2989,7 +2995,7 @@ if (x = advance (x), x != 0)
@noindent @noindent
However, putting the assignment in a separate statement is usually clearer However, putting the assignment in a separate statement is usually clearer
unless the assignment is very short, because it reduces nesting. (unless the assignment is very short), because it reduces nesting.
@node Execution Control Expressions @node Execution Control Expressions
@chapter Execution Control Expressions @chapter Execution Control Expressions
@ -3978,10 +3984,10 @@ platform, too. Even for GNU C, there is no general rule.
In theory, all of the integer types' sizes can vary. @code{char} is In theory, all of the integer types' sizes can vary. @code{char} is
always considered one ``byte'' for C, but it is not necessarily an always considered one ``byte'' for C, but it is not necessarily an
8-bit byte; on some platforms it may be more than 8 bits. ISO C 8-bit byte; on some platforms it may be more than 8 bits. @code{short
specifies only that none of these types is narrower than the ones int} and @code{int} are at least two bytes long (it may be longer).
above it in the list in @ref{Basic Integers}, and that @code{short} @code{long int} is at least four bytes long, and @code{long long int}
has at least 16 bits. at least eight bytes long.
It is possible that in the future GNU C will support platforms where It is possible that in the future GNU C will support platforms where
@code{int} is 64 bits long. In practice, however, on today's real @code{int} is 64 bits long. In practice, however, on today's real
@ -4793,12 +4799,16 @@ And in an identifier:
int foo\u6C34bar = 0; int foo\u6C34bar = 0;
@end example @end example
Codes in the range of @code{D800} through @code{DFFF} are limited to Codes in the range of D800 through DFFF are invalid in universal
very specialized uses, too specialized to explain here. Codes less character names. Trying to write them using @samp{\u} causes an
than @code{00A0} are invalid, except for @code{0024}, @code{0040}, and error. Unicode calls them ``surrogate code points'' and uses them in
@code{0060}; these characters are actually ASCII control characters, UTF-16 for purposes too specialized to explain here.
and you can specify them with other escape sequences (@pxref{Character
Constants}). Codes less than 00A0 are likewise invalid in universal character
names, and likewise cause errors, except for 0024 (@samp{$}), 0040
(@samp{@@}), and 0060 (@samp{`}). Character codes which can't be
represented with universal character names can be specified with octal
or hexadecimal escape sequences (@pxref{Character Constants}).
@node Wide Character Constants @node Wide Character Constants
@section Wide Character Constants @section Wide Character Constants
@ -5850,10 +5860,13 @@ appropriate unsigned integer type.
@cindex structures @cindex structures
@findex struct @findex struct
@cindex fields in structures @cindex fields in structures
@cindex compound type
A @dfn{structure} is a user-defined data type that holds various A @dfn{structure} is a user-defined data type that holds various
@dfn{fields} of data. Each field has a name and a data type specified @dfn{fields} of data. Each field has a name and a data type specified
in the structure's definition. in the structure's definition. Because a structure combines various
fields, each of its own type, we call a structure type a
@dfn{compound type}.
Here we define a structure suitable for storing a linked list of Here we define a structure suitable for storing a linked list of
integers. Each list item will hold one integer, plus a pointer integers. Each list item will hold one integer, plus a pointer