1. Changelog
1.1. Revision 0 - April 12th, 2022
-
Initial Release 🎉
-
Targeting C2Y/C3X (after C23).
2. Design
This is a (minor) compatibility issue with literal suffixes that may be potentially used in shared code in the future. C++ adopted suffixed literals for size_t in [p0330]. The design is as follows:
#include <stddef.h>size_t ulit_val = 0 zu ;
The
, as with current literals, can be placed on either the left or the right of the
suffix to make it unsigned. For symmetry with existing suffix literal rules, it also has a signed variant. That type is the "signed integer type of size_t", which normally resolves to
:
#include <stddef.h>ptrdiff_t lit_val = 0 z ;
The signed variant lacks the
as a piece of the
suffix. This also matches the way
adjusts specific codes to display
or
-sized variables. The design is simple and, thankfully, compatible with C++. It also provides a way to avoid signed comparison warnings in compilers which implement more strict comparisons checks, e.g., when comparing a
value against some fixed constant value.
2.1. Even After Compatibility, Do We Really Need This?
Yes. The trip to put this paper into C++ was an extremely long one and came with a ton of reasons. All of it can be seen in [p0330] and 90% of that reasoning applies to C, especially in the face of
.
3. Wording
Wording is relative to [N2731].
3.1. Intent
The goal of this wording is to provide:
-
a literal suffix for both the signed (
) or unsigned (ptrdiff_t
) variant of the type of the expression "size_t
"; and,sizeof ( 0 ) -
use the suffix
in either the formz
oruz
to produce azu
.size_t
3.2. Specification
3.2.1. Add two new grammar productions to §6.4.4.1 Integer constants¸ Syntax, ¶1
6.4.4.1 Integer constants Syntax…
- integer-suffix:
- unsigned-suffix long-suffixopt
- unsigned-suffix long-long-suffix
- unsigned-suffix size-suffix
- long-suffix unsigned-suffixopt
- long-long-suffix unsigned-suffixopt
- size-suffix unsigned-suffixopt
…
- long-long-suffix: one of
- ll LL
- size-suffix: one of
- z Z
3.2.2. Add two new table rows to §6.4.4.1 Integer constants¸ Semantics, ¶6
Suffix Decimal Constant Octal, Binary, or Hexadecimal Constant … … … z or Z the corresponding signed integer type of the expression 's type (6.5.3.4)
sizeof ( 0 ) the corresponding signed integer type of the expression 's type
sizeof ( 0 ) Both U or U and z or Z the same type as the expression
sizeof ( 0 ) the same type as the expression
sizeof ( 0 ) …
Forward references: preprocessing numbers (6.4.8), numeric conversion functions (7.22.1) , The sizeof and _Alignof operators (6.5.3.4) .