Cray Standard C/C++ Reference Manual
• enum tags can be incomplete as long as the tag name is defined and resolved
by specifying the brace-enclosed list later.
• An extra comma is allowed at the end of an enum list.
• The final semicolon preceding the closing of a struct or union type
specifier can be omitted.
• A label definition can be immediately followed by a right brace ( } ).
(Normally, a statement must follow a label definition.)
• An empty declaration (a semicolon preceded by nothing) is allowed.
• An initializer expression that is a single value and is used to initialize an
entire static array, struct, or union does not need to be enclosed in braces.
ANSI C requires braces.
• In an initializer, a pointer constant value can be cast to an integral type if the
integral type is large enough to contain it.
• The address of a variable with register storage class may be taken.
• In an integral constant expression, an integer constant can be cast to a pointer
type and then back to an integral type.
• In duplicate size and sign specifiers (for example, short short or
unsigned unsigned) the redundancy is ignored.
• Benign redeclarations of typedef names are allowed. That is, a typedef
name can be redeclared in the same scope with the same type.
• Dollar sign ($) and at sign (@) characters can be accepted in identifiers
by using the -h calchars command line option. This is not allowed by
default.
• Numbers are scanned according to the syntax for numbers rather than the
pp-number syntax. Thus, 0x123e+1 is scanned as three tokens instead
of one token that is not valid. If the -h conform option is specified, the
pp-number syntax is used.
• Assignment and pointer differences are allowed between pointers to types
that are interchangeable but not identical, for example, unsigned char *
and char *. This includes pointers to integral types of the same size (for
example, int * and long *). Assignment of a string constant to a pointer to
any kind of character is allowed without a warning.
• Assignment of pointer types is allowed in cases where the destination type
has added type qualifiers that are not at the top level (for example, int **
164 S–2179–36
Comments to this Manuals