Outils pour utilisateurs

Outils du site


lang:c:cast

Ceci est une ancienne révision du document !


Cast implicite

int i = 0xFFFF;
unsigned char c = i;

Cast explicite

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 les parenthèses.

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.

int k = 0x7fffffff;
k = (int)(k + 150);

Réajuster un pointeur pour l'utiliser dans une fonction

const char * t = "coucou";
 
void f(char * tt)
{
}
 
int main()
{
  f((char *)t);
}
lang/c/cast.1583265817.txt.gz · Dernière modification : 2020/03/03 21:03 de root