cproc implements some C23 features applied to the latest drafts.
C11 required that static assertions always contained a message. C23
_Static_assert with just an expression.
C23 introduces UTF-8 character constants using the syntax
Compared to an unprefixed character constant, they have type
unsigned char instead of
int, and are guaranteed to use UTF-8 encoding
rather than the execution character set. Since the character in a
UTF-8 character constant must have a single-byte UTF-8 encoding,
this type of character constant could be useful when you need the
ASCII value of a character, but do not want to depend on any
particular execution character set.
In previous revisions of C, labels like
case 123:, or
default: could only precede statements. This was relaxed in C23,
and they can now appear intermixed with declarations in compound
C23 allows you to omit the name of a parameter in the prototype of a function definition that does not use that parameter.
C23 allows binary integer constants in addition to octal, decimal,
and hexadecimal, using syntax like
C23 allows empty initializers to initialize an object as if it had static storage duration.