===Cast implicite===
int i = 0xFFFF;
unsigned char c = i;
===Cast explicite lors de la déclaration===
Définir un nombre non signé :
unsigned int i = 0xFFFFFFFFU;
Définir un nombre 64 bits :
unsigned long i = 0xFFFFFFFFFFFFFFFFLU;
Définir un nom flottant (et par un double)
float f = 0.1f;
===Cast explicite lors de la conversion (C uniquement)===
Ici, un cast explicite est nécessaire si ''-Wconversion'' est activé car une perte de précision est prévisible entre ''double'' et ''float''.
double d = 0.1;
float f = (float)d;
Un cast se fait tout simplement en ajoutant entre parenthèses le type de destination.
Il peut être aussi nécessaire de réajuster un pointeur pour l'utiliser dans une fonction.
const char * t = "coucou";
void f(unsigned char * tt)
{
}
int main()
{
f((unsigned char *)t);
}
===Gérer les dépassements de limites===
int k = 0x7fffffff;
k += 150;
Si on compile le programme avec ''-fsanitize=undefined'', on aura le message d'erreur : ''runtime error: signed integer overflow: 2147483647 + 150 cannot be represented in type 'int%%'%%''
Il n'est pas possible de gérer ces dépassements par un cast. Il est nécessaire d'utiliser les fonctions de contrôles ''%%__%%builtin_add_overflow'', ''%%__%%builtin_sub_overflow'' et ''%%__%%builtin_mul_overflow''. Ces trois fonctions renvoient ''true'' quand un overflow est détectée (à partir de gcc 5.0 et clang 3.8).
int main() {
int k = 0x7fffffff;
// true car overflow
return __builtin_add_overflow(k, 150, &k);
}