Liste des Groupes | Revenir à cl c |
-------- Mensagem encaminhada --------KT> (My quick experiment indicates that, at least on my system,
Assunto: Re: What is your opinion about unsigned int u = -2 ?
Data: Fri, 02 Aug 2024 19:29:27 -0700
De: Keith Thompson <Keith.S.Thompson+u@gmail.com>
Organização: None to speak of
Grupos de notícias: comp.lang.c
Referências: <v8dfo9$1k7cg$1@dont-email.me>
<pan$d2c8a$8c54ac9f$29a202e0$12c6ce86@invalid.invalid>
<87bk2cecan.fsf@bsb.me.uk> <v8inds$2qpqh$1@dont-email.me>
<v8iqnr$7l3c$1@news.xmission.com> <v8irje$2rolg$1@dont-email.me>
<87r0b6g3qx.fsf@nosuchdomain.example.com>
<v8jbj5$2us0r$4@dont-email.me> <v8jvln$33atp$1@dont-email.me>
<v8k055$33fcl$1@dont-email.me>
<87cymqfl3m.fsf@nosuchdomain.example.com>
<v8k2ck$33nca$2@dont-email.me>
>
Thiago Adams <thiago.adams@gmail.com> writes:Em 8/2/2024 10:31 PM, Keith Thompson escreveu:>Thiago Adams <thiago.adams@gmail.com> writes:>
[...]It is interesting to compare constexpr with the existing constantI'm not sure what you mean by "Compilers extend to work with
expression in C that works with integers.Compilers extend to work with
unsigned long long.
constexpr works with the sizes as defined , for instance char.
unsigned long long.".
enum {C = 18446744073709551615 -1 };
// ~~~~~~~~~~~~~~~~~~~~
// ^ warning: integer constant is so large that it is unsigned
>
https://godbolt.org/z/K7hzczETP
Since 18446744073709551615 is 2**64-1, it's outside the range of any
signed integer type in typical implementations. Since unsuffixed
integer constants are of some signed type (since C99), that constant is
likely to cause problems. You could write 18446744073709551615ull.
>
That's a rather odd warning. In C90, an unsuffixed integer constant's
type was the first of (int, long int, unsigned long int) in which its
value would fit. In C99 and later, an unsuffixed integer constant is of
type int, long int, or long long int, *never* of any unsigned type.
Since 18446744073709551615 exceeds ULLONG_MAX (assuming 64 bits),
apparently gcc treats it as having an unsigned type as an extension.
>
"In C99 and later, an unsuffixed integer constant is of>
type int, long int, or long long int, *never* of any unsigned type."
I think this should be reviewed before they constexpr was added in C.
I am fixing my constant expression evaluation in cake and I will share
the code of "old" constant expressions and new constexpr. So constexpr
does not have restriction on signed types only.
Les messages affichés proviennent d'usenet.