Utilité des parenthèses - (char)

Utilité des parenthèses - (char) - C - Programmation

Marsh Posté le 15-02-2006 à 12:51:27    

Bonjour,
 
En bidouillant et en cherchant un peu sur le net, j'ai trouvé une "astuce" et ça resoud mon problème, sympa hein :)
C'est :

Code :
  1. fprintf(out,"%c",(char) i);


en mettant des parenthèses autour de char
 
Je voulais juste savoir à quoi servait ces parenthèses... :??: si vous avez une explication ou un lien vers de la doc, je prend
merci :)

Reply

Marsh Posté le 15-02-2006 à 12:51:27   

Reply

Marsh Posté le 15-02-2006 à 12:53:24    

C'est un cast, i est probablement un int et %c represente un char donc tu caste int en char.

Reply

Marsh Posté le 15-02-2006 à 13:11:45    

b777 a écrit :

En bidouillant et en cherchant un peu sur le net, j'ai trouvé une "astuce" et ça resoud mon problème, sympa hein :)
C'est :

Code :
  1. fprintf(out,"%c",(char) i);


en mettant des parenthèses autour de char
 
Je voulais juste savoir à quoi servait ces parenthèses... :??: si vous avez une explication ou un lien vers de la doc, je prend
merci :)


Il est temps d'ouvrir un livre de C (dés références sur mon site). Le typecast est une des opérations élémentaires du langage (abus dangereux).
Il faut cesser de programmer au hasard.
 
http://mapage.noos.fr/emdel/images/c_warn.png


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 15-02-2006 à 15:36:22    

b777 a écrit :

Bonjour,
 
En bidouillant et en cherchant un peu sur le net, j'ai trouvé une "astuce" et ça resoud mon problème, sympa hein :)
C'est :

Code :
  1. fprintf(out,"%c",(char) i);


en mettant des parenthèses autour de char
 
Je voulais juste savoir à quoi servait ces parenthèses... :??: si vous avez une explication ou un lien vers de la doc, je prend
merci :)


 

francky06l a écrit :

C'est un cast, i est probablement un int et %c represente un char donc tu caste int en char.


 
Pour faire suite à "francky06l", le "cast" vient de l'anglais "cast" qui signifie "jouer un rôle" et qui a donné le "casting" au cinéma.
Ta variable "i" (mettons qu'elle soit "short" ) est considérée, à cet endroit, comme un "char" et les 8 bits de poid fort disparaissent. Si elle contient une valeur plus grande que 255, cette valeur est tronquée à "modulo 255".
 
Il existe des cast dits "implicites" car ils sont faits de façon naturelle

int a;
char b;
b=a;   // Ici, "a" est implicitement converti en "char" pour être copié dans "b"
a=b;   // Ici, "b" est implicitement converti en "int" pour être copié dans "a"


 
Le code que tu montres est un cast "explicite" car tu écris le type voulu toi-même. Dans ton cas à toi, il n'est pas obligatoire. Mais il peut l'être aileurs... Exemple:

int a=10;
int b=3;
double c;
double d;
 
c=a/b;
d=(double)a / (double)b;


Si tu affiches "c", tu auras "3.00000" car "a" et "b" étant des "int", l'opération s'est faite en "int" et le résultat "3" a été casté en double.
En revanches, si tu affiches "d", tu auras bien "3.33333" car, pendant la division, "a" et "b" auront été considérés comme des "doubles".
De plus, comme durant une opération l'ensemble des valeurs est convertie dans le type le plus large de tous les types présents, on n'est pas obligé de mettre un cast sur les deux opérandes => "c=(double) a / b"  est bien suffisant...
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed