Concepts en C

Cohérence, logique et fonctionnement du C


précédentsommairesuivant

IV. Grandeurs à caractère booléen

Une grandeur de type booléen peut prendre comme valeurs Vrai ou Faux. En C ISO90, le type booléen, bien que de la première importance, est resté "incomplet". On doit néanmoins le considérer comme un type de données particulier puisqu'il possède une gamme d'opérateurs et une sémantique qui lui sont propres.
Cet "oubli" a été réparé en C99 avec l'introduction du type _Bool.

L'importance du type booléen vient de ce qu'il est utilisé par les instructions de contrôle du programme :

if(exp_bool)... do(exp_bool)... do... while(exp_bool) for (...; exp_bool ;...)...



ainsi que dans l'expression conditionnelle obtenue avec l'opérateur ternaire ?:

exp_bool ? expa : expb


Les valeurs de type booléen sont produites comme résultat des opérateurs de comparaison.

IV-A. Opérateurs entre booléens

Les opérateurs suivants prennent pour opérande(s) des valeurs booléennes et fournissent une valeur booléenne :

  • ET booléen : opérateur &&
  • OU booléen : opérateur ||
  • NON booléen : opérateur unaire !

A noter que les expressions formées à partir de l'un des deux premiers opérateurs utilisent une procédure d'évaluation particulière : leur opérande de gauche est toujours évalué en premier. Si le résultat obtenu permet de déterminer le résultat final de l'expression, l'opérande de droite n'est pas évalué.

IV-B. Représentation des valeurs booléennes

Si les booléens sont utilisés correctement, comme un type de donnée particulier, leur représentation interne peut être largement occultée.

Les valeurs booléennes sont assimilées à des entiers, Faux étant représenté par la valeur 0 (toute valeur différente de 0 sera considérée en tant que booléen comme étant Vrai). Les expressions fournissant une valeur booléenne comme résultat donneront 1 pour la valeur Vrai.
La conséquence de cette assimilation est qu'il est possible de mélanger des expressions arithmétiques et booléennes. Ces expressions sont peu lisibles (par défaut d'abstraction car elles reposent sur la représentation interne des booléens), n'ont pas grand sens et constituent un vieux jargon de programmeur C. Elles peuvent toujours être remplacées par des expressions respectant la sémantique des booléens.
Ce mélange des genres est donc fortement déconseillé.

exemple
Sélectionnez
               3+ (j>0)
  Mais que peut signifier 3+Vrai ou 3+Faux ?? 
  Ceci peut être écrit beaucoup plus logiquement avec
  l'opérateur d'expression conditionnelle :
              j>0 ? 4 : 3


De même, là où est attendue une valeur booléenne, placez une expression dont le résultat est une valeur booléenne.

exemple
Sélectionnez
  - Si i est un nombre, écrivez     if(i == 0)...         
    de préférence à                 if(!i)...           
    qui exprime implicitement que i a un caractère booléen.
 
  - Si b a un sens booléen, ecrivez if(!b)
    de préférence à                 if(b == 0)...


En C90, pour déclarer un objet de type booléen, il faudra lui donner en pratique un type entier et une fonction retournant un booléen devra retourner un type entier.

exemple
Sélectionnez
 typedef enum {Faux,Vrai} Bool;
 
  Toutefois, cette définition n'est pas totalement satisfaisante
  car elle ne permet pas l'évaluation correcte des expressions
  (redondantes) UnBool==Vrai et UnBool!=Vrai si UnBool  est différent de 0 ou 1

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.