Generate an integer expression of type T and value X.
This macro is suitable for use in preprocessor conditionals, provided X evaluates to an integer constant.
- Beware that the type information T is simply ignored by the preprocessor because its arithmetic is done with types
uintmax_t. If you want to be sure that it is used as
uintmax_t suffix the constant X with an "u" or "U".
Don't use this to perform bit-complement arithmetic in the preprocessor, since
uintmax_t might have more bits than T, the result might not be what you expect.
|T||must be a type identifier, just one word that represents a type.|
|X||could be any integer expression that is allowed in the same context. It is an error for X to evaluate to a pointer value.|
The macro itself uses a dirty trick. In preprocessor context of conditional evaluation the T in the expansion is just an identifier that is unknown to the preprocessor and it is thus replaced by
+ sign is thus a binary plus.
In program context
(T) is interpreted as a cast. The
+ sign is thus a prefix to the integer expression. This results in an error when an attempt is made to use this with a pointer value.
Definition at line 278 of file p99_int.h.