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 ;)
wouaha je pensais pas déclencher tout ça 8O :mrgreen:
Oui j'ai oublié que c'était dans le cas de fonctions sans prototype :oops:, désolé.Citation:
Envoyé par Jean-Marc.Bourguet
Jc
Oui. Les calculs et les évaluations sont faits en int.Citation:
Envoyé par Franck.H
Le bon type pour les traitements est donc int.
Pour le stockage, le plus performant en terme de taille est évidemment un bit d'un champ de bit (surtout si il y en a plusieurs).
Pour un scientifique sans formation d'informaticien, plus difficile 8O :DCitation:
Envoyé par Emmanuel Delahaye
Et en plus, si tu veux t'en servir dans un protocole ou une structure et traiter de la même manière un bool, un int, un double, dans une variable, nettement plus costaud...
:chin:
Elle sort d'où cette définition ? Ce n'est pas plus sûr de ce baser sur la version du standard utilisé ?Citation:
Envoyé par Jean-Marc.Bourguet
D'un systeme de configuration quelconque (config.h, -D sur la ligne de commande,...). Je me vois mal batir du soft sans moyen de le configurer.Citation:
Envoyé par gege2061
Je ne connais pas de moyen portable de faire un include qui peut echouer (certains preprocesseurs le permettent peut-etre).Citation:
Ce n'est pas plus sûr de ce baser sur la version du standard utilisé ?
Une alternative est de creer un fichier stdbool.h et de s'arranger pour qu'il ne soit trouve que si il n'en existe pas de fourni par le compilo. A nouveau un jeu de configuration.
Non, tu ne te trompes pas. J'avoue ne pas me servir beaucoup de cette macro, et de me servir plus volontier d'un système de configuration pour assurer la portabilité de mes programmes.Citation:
Envoyé par gege2061
Thierry
C'est le genre de macro que les implementations definissent meme quand elles n'ont pas un support complet de la norme. Donc on peut se retrouver sans la bonne version mais avec la feature -- parce que l'implementation a decide que son support n'etait pas complet assez -- ou avec la bonne valeur de macro mais sans la feature... il faut donc un support de configuration plus fin que cela.Citation:
Envoyé par gege2061
Ok, je comprend mieux. En y reflechissant c'est d'ailleurs le cas de gcc :?Citation:
Envoyé par Jean-Marc.Bourguet
Merci ;)