===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); }