Since label definition and label reference are syntactically distinctive contexts, labels are established as a separate name space.
The Committee considered proposals
for forbidding a
goto into a block from outside,
since such a restriction would make possible much easier flow
optimization and would avoid the whole issue of initializing
The Committee rejected such a ban out of fear of invalidating working code
and out of concern for those
producing machine-generated C.
void cast is not needed in an expression statement,
since any value is always discarded.
Some checking compilers prefer this reassurance, however, for functions
that return objects of types other than
The controlling expression of a
statement may now have any integral type,
Floating types were rejected for switch statements since exact
equality in floating point is not portable.
labels are first converted to the type of the controlling expression
of the switch, then checked for equality with other labels;
no two may match after conversion.
(of the form
were seriously considered,
but ultimately not adopted in the Standard on the grounds that
it added no new capability, just a problematic coding convenience.
The construct seems to promise more than it could be mandated to deliver:
'A'..'Z'would specify all the integers between the character code for
Aand that for
Z. In some common character sets this range would include non-alphabetic characters, and in others it might not include all the alphabetic characters (especially in non-English character sets).
longexpressions and constants in switch statements are no longer truncated to
The Committee rejected proposed enhancements to
which would allow specification of an iteration statement
other than the immediately enclosing one,
on grounds of insufficient prior art.