Bonjour,
Je viens de compiler un code avec Visual Studio 2005 et il ne veut pas de mon
#include <stdbool.h>
Le code marche très bien avec gcc.
Est-ce que quelqu'un sait pourquoi visual ne connait pas stdbool.h?
Version imprimable
Bonjour,
Je viens de compiler un code avec Visual Studio 2005 et il ne veut pas de mon
#include <stdbool.h>
Le code marche très bien avec gcc.
Est-ce que quelqu'un sait pourquoi visual ne connait pas stdbool.h?
Parce que Microsoft a décidé de ne pas implanter la norme C99. Les fichiers d'en-tête standards spécifiques à cette version de la norme ne sont donc pas reconnus par le compilateur de Visual Studio.Citation:
Envoyé par Binch
Thierry
Ok merci, donc la seule solution est de jouer avec des int?
Ou de changer d'EDI/Compilateur :lol:Citation:
Envoyé par Binch
En fait tu peut très bien fait ton propre type booléen: Existe-t'il un type booléen en C ? ;)
Effectivement! Mais je suis assez fan du debogueur de visual!
Merci pour la réponse
Bonjour,
Pour être tranquille tu peux faire :
;)Code:
1
2
3
4
5
6
7
8 #if __STDC_VERSION__ >= 199901L # include <stdbool.h> #else # define TRUE 1 # define FALSE 0 # define bool int # define __bool_true_false_are_defined #endif
Normal. VS2005 ne supporte pas C99.Citation:
Envoyé par Binch
Mais je dirais qu'en C les booléens ça ne sert à rien. Une expression logique retourne un int valant 0 ou 1...
Définir un type booléen a une valeur documentaire...
et je dirais même plus... :mrgreen:
Etant donné qu'on peut définir un booléen avec un char, on peut économiser de la place, pour des applications demandant beaucoup de mémoire..
Multiplié par 500 000, ça fait une différence entre int et char....Code:
1
2#define BOOLEAN char
Oui, je pense qu'il est mieux de prendre un char, moi je prend même un unsigned char pour mon type bool perso :D
sauf qu'un typedef serait plus approprié qu'un define, je pense...
+1Citation:
Envoyé par Médinoc
Sauf si tu t'amuses à passer tes booléens en paramètre vers des fonctions... Les mettre en char peut surcharger ton code par du code de transformation char -> int...Citation:
Envoyé par souviron34
Jc
La promotion est systématique ?Citation:
Envoyé par fearyourself
Si vous voulez etre compatible avec C99, il faudrait que true et false soient en minuscule.
Lorsqu'on passe en paramètre, oui à mon souvenir.Citation:
Envoyé par Franck.H
Jc
Mais C99 fait de bool une macro...Citation:
Envoyé par Médinoc
Je verrai bien un entete
Je sais, on empiete sur les identificateurs reserves, mais vu le contexte ca me semble mieux que de ne pas le faire.Code:
1
2
3
4
5
6
7
8
9 #if HAS_STDBOOL_H #include <stdbool.h> #elif !defined(__bool_true_false_are_defined) typedef char _Bool; #define true 1 #define false 0 #define bool _Bool #define __bool_true_false_are_defined 1 #end
Pas si il existe un prototype pour la fonction.Citation:
Envoyé par Franck.H
Quelle promotion? Si tu passes un char a un char il n'y a pas de promotion. Je crois qu'il y a de la confusion avec le fait qu'un char est promu en int quand passe a une fonction sans prototype (il ne doit pas y en avoir encore beaucoup) ou comme parametre variadique.Citation:
Envoyé par fearyourself
Bon bin c'est bon à savoir que cela peut changer entre fonction avec ou sans prototype ... !
Merci de l'info ;)