blog/_posts/2015-05-15-utiliser-des-var...

84 lines
2.1 KiB
Markdown

---
title: "Utiliser des variables de type Booléen - C"
date: 2015-05-15
url: utiliser-des-variables-de-type-booleens-c
layout: post
category: Programming
---
[![A missing blog post image](/img/blog/utiliser-des-variables-de-type-booleens-c.png)](/img/blog/utiliser-des-variables-de-type-booleens-c.png)
Vous savez tous qu'une des nouveautés que le _C++_ a apporté est bien la gestion du type `bool`. Une variable pouvant donc être à `1` ou à `0`, traduisant l'état d'un objet comme un interrupteur par exemple, mais qui sert surtout à rendre le code plus lisible, même si la plupart d'entre vous pensent qu'il est inutile...
Mais la question est, pouvons-nous utiliser ce type en _C_ maintenant ?
Oui et non, du moins, pas si facilement.
Se présentent à vous plusieurs méthodes, à vous de choisir celle que vous préférez !
---
### Rédéfinition du type de façon manuelle
Qu'est-ce qu'un `bool` ? Une simple variable contenant `0` ou `1`, alors quel est le type pouvant remplir cette tâche le plus facilement possible ?
Le `int`. Et maintenant en prenant le moins de place possible en mémoire ?
Le `char` !
Donc voici une implémentation possible :
{% highlight c %}
#define true 1
#define false 0
typedef char bool;
/* */
bool var = true;
{% endhighlight %}
---
### Utilisation du mot clef _\_Bool_
Depuis le _C99_, il existe en fait un type booléen, mais il n'est pas sous la forme `bool`. Voici son utilisation :
{% highlight c %}
#define true 1
#define false 0
/* */
_Bool var = true;
{% endhighlight %}
---
### Maniaque ? Pas pratique ? Utilisons _bool_
Petite technique consistant juste à définir _bool_ comme _Bool_ :
{% highlight c %}
#define true 1
#define false 0
typedef _Bool bool;
/* */
bool var = true;
{% endhighlight %}
---
### Utilisation de _stdbool.h_
Une librairie supplémentaire a été apportée avec la norme _C99_, comportant 4 macros. Avec elles, vous pouvez directement utiliser le type `bool`. Cette technique est à utiliser si votre projet est compilé en _C99_ ou supérieur. Pour _C89_, voir ci-dessus :wink:
{% highlight c %}
#include <stdbool.h>
/* */
bool var = true;
{% endhighlight %}