Le compilateur que l’on demande d’installer dans le tutoriel sur le langage c supporte-il la norme C99? Car quand j’essaye d’utiliser le type _Bool avec #include <stdbool.h>, ça ne fonctionne pas.
La question est un peu bête mais, comment modifier Mingw pour qu’il supporte la norme C99?
Ok, j’ai pas trop compris la signification du script mais peu importe.
Si je défini une variable b de type _Bool qui vaut 10 == 10 par exemple, comment faire pour afficher TRUE via printf, on utilise quoi comme indicateur de conversion?
@Karnaj : juste pour dire, le type _Bool est un type natif, il ne nécessite donc pas l’en-tête <stdbool.h>. Ce dernier n’est là que pour définir la macroconstante bool (pour le type _Bool) et les macroconstantes true et false (valant respectivement 1 et 0).
Le type _Bool est techniquement un type entier capable de stocker les valeurs zéro et un. Tu peux donc afficher la valeur d’un objet d’un tel type à l’aide du format %d ou %u (puisque seuls les valeurs 0 et 1 peuvent lui être assignées). Il n’y a donc pas de format spécifique de ce côté fournit par la fonction printf(). Cela peut par contre ce faire simplement à l’aide d’un opérateur conditionnel et de deux chaînes de caractères, mais c’est un peu avancé par rapport à ta position dans le cours.
juste pour dire, le type _Bool est un type natif, il ne nécessite donc pas l’en-tête <stdbool.h>. Ce dernier n’est là que pour définir la macroconstante bool (pour le type _Bool) et les macroconstantes true et false (valant respectivement 1 et 0).
En effet, merci pour la précision. Il y a des gens qui les utilisent vraiment où c’est marginal ? J’ai vraiment très rarement touché aux booléens de C99 (vu que je compile quasiment toujours pour que ça marche en C89…).
Très franchement, je n’en ai aucune idée. Je suppose qu’ils sont utilisés lorsque le C99 (ou C11) est choisit étant donné qu’il s’agit d’un vrai type booléen, dans le sens où le compilateur fait bien en sorte que seuls les valeurs 0 ou 1 lui soient assignées.
1
_Booltest=10;/* test == 1 */
Maintenant, je n’ai pas plus d’idée que ça quant à son adoption.
Visiblement, l’en-tête <stdbool.h> de la GNU libc (et aussi de la libc d’OpenBSD) définit le type _Bool dans le cas où il n’existe pas.
1
2
3
4
typedefenum{false=0,true=1}_Bool;
Je ne connais pas la raison de ce choix étant donné que cet en-tête n’a été ajouté que depuis la norme C99, mais toujours est-il que cela explique pourquoi ton code compile également en C89.
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte