lang:c:cast
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
lang:c:cast [2020/03/03 21:03] – Création root | lang:c:cast [2020/03/04 08:21] (Version actuelle) – Ajout des cast explicite pour les nombres root | ||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
</ | </ | ||
- | ===Cast explicite=== | + | ===Cast explicite |
- | + | Définir | |
- | Ici, un cast explicite est nécessaire si '' | + | <code c> |
+ | unsigned int i = 0xFFFFFFFFU; | ||
+ | </ | ||
+ | Définir un nombre 64 bits : | ||
<code c> | <code c> | ||
- | double d = 0.1; | + | unsigned long i = 0xFFFFFFFFFFFFFFFFLU; |
- | float f = (float)d; | + | |
</ | </ | ||
- | Un cast se fait tout simplement en ajoutant les parenthèses. | + | Définir un nom flottant (et par un double) |
- | + | ||
- | ===Gérer les dépassements de limites=== | + | |
<code c> | <code c> | ||
- | int k = 0x7fffffff; | + | float f = 0.1f; |
- | k += 150; | + | |
</ | </ | ||
- | Si on compile le programme avec '' | + | ===Cast explicite lors de la conversion (C uniquement)=== |
- | Il n'est pas possible de gérer ces dépassements par un cast. Il est nécessaire | + | Ici, un cast explicite |
<code c> | <code c> | ||
- | int k = 0x7fffffff; | + | double d = 0.1; |
- | k = (int)(k + 150); | + | float f = (float)d; |
</ | </ | ||
- | ===Réajuster | + | Un cast se fait tout simplement en ajoutant entre parenthèses le type de destination. |
+ | |||
+ | Il peut être aussi nécessaire de réajuster | ||
<code c> | <code c> | ||
const char * t = " | const char * t = " | ||
- | void f(char * tt) | + | void f(unsigned |
{ | { | ||
} | } | ||
Ligne 44: | Ligne 44: | ||
int main() | int main() | ||
{ | { | ||
- | f((char *)t); | + | f((unsigned |
}</ | }</ | ||
+ | |||
+ | ===Gérer les dépassements de limites=== | ||
+ | |||
+ | <code c> | ||
+ | int k = 0x7fffffff; | ||
+ | k += 150; | ||
+ | </ | ||
+ | |||
+ | Si on compile le programme avec '' | ||
+ | |||
+ | Il n'est pas possible de gérer ces dépassements par un cast. Il est nécessaire d' | ||
+ | |||
+ | <code c> | ||
+ | int main() { | ||
+ | int k = 0x7fffffff; | ||
+ | // true car overflow | ||
+ | return __builtin_add_overflow(k, | ||
+ | } | ||
+ | </ |
lang/c/cast.1583265817.txt.gz · Dernière modification : 2020/03/03 21:03 de root