Quelle est la différence entre le faux et le FAUX?
Dans de nombreux programmes, je vois des déclarations avec les identifiants FALSE
et false
. Quelle est la différence entre eux dans le cadre de C++?
Également dans certains programmes, j'ai vu bool
et quelque part BOOL
. Quelle est la différence entre ces deux?
Quelqu'un peut-il expliquer la différence entre ces identifiants pour moi? Merci.
- Est-ce que sous Windows? Ensuite, c'est un vestige d'une époque quand il n'en a pas les booléens et de FAUX a été défini à 0.
- tu veux dire le FAUX est défini par des booléens alors que sur faux?
- Non,
FALSE
a été défini comme ceci:#define FALSE (0)
false
fait partie de la langue.
Vous devez vous connecter pour publier un commentaire.
Si vous avez inclus
windows.h
, puisFALSE
est définie comme 0.TRUE
est défini comme 1. Il est pas un type Booléen, c'est un type entier. Windows a également défini le type deBOOL
, qui est en fait un type entier, conçu pour accueillir les valeursTRUE
etFALSE
.Les sections correspondantes du code de
windows.h
ressembler à quelque chose comme ceci:Windows a été initialement écrit en C, comme l'ont été tous les originaux des applications Windows. À ce moment, C n'ont pas de type Booléen définies par la norme. Au lieu de cela, les développeurs ont été contraints de définir leurs propres constantes de type Boolean. Pour éviter une éventuelle désordre qui pourrait provoquer, Microsoft a décidé sur une norme qui sera utilisée pour toutes les applications Windows.
Si vous écrivez des applications Windows, vous pouvez encore utiliser les
TRUE
etFALSE
identifiants. Plusieurs des fonctions définies danswindows.h
accepter les paramètres Booléens (en fait des entiers!) tapé commeBOOL
ou des valeurs de retour de ce type. C++, fortement typé, peut déposer une plainte si vous contraindre ces Booléenne de type défini dans la langue standard. Pour des raisons de cohérence, j'ai utiliser les identificateurs de vieux à tous mes appels aux fonctions de l'API Windows, et letrue
etfalse
mots-clés définies par la norme dans toutes les méthodes que j'écris moi-même.Il n'y a vraiment aucune raison de ne pas utiliser
FALSE
qu'elle est définie danswindows.h
. Mais vous ne devriez pas le définir vous-même dans le propriétaire d'un fichier d'en-tête, comme d'autres l'ont mentionné, car il n'y a aucune garantie que la définition reste constant au cours du temps. Que pourrait causer certains assez idiot de bugs, le type qui se qualifier pour apparaître sur le Quotidien WTF.Tapis de réponse est correct à 100% que ni
TRUE
ouFALSE
sont définies par le C ou C++ normes. Cependant, ils sont strictement défini par l'API de Windows et de la garantie de ne pas changer. Leur utilisation ne produira pas vraiment la croix-plate-forme, strictement conforme aux normes du code C++, mais c'est rarement un sujet de préoccupation lors de l'écriture d'applications Windows, comme ni appeler à l'un des autres fonctions danswindows.h
.bool
est le type Booléen défini dans la norme C++. Il fonctionne avec le bas-de-cassetrue
etfalse
mots-clés.BOOL
est un entier de type, défini parwindows.h
, conçu pour travailler avec le haut-tubéTRUE
etFALSE
. Facile à retenir, comme le cas de match pour chaque groupe.BOOL
type est défini à travailler avecTRUE
etFALSE
. Tout cela fait partie dewindows.h
. Je serai heureux d'expliquer plus loin si vous n'avez pas compris mon dernier commentaire. 🙂bool
etBOOL
. Je suppose que vous avez supprimé ce commentaire maintenant, après avoir vu celle que j'avais posté avant.BOOL
type (*PBOOL
), et d'un pointeur long pour laBOOL
type (*LPBOOL
). Si vous connaissez le C++, vous savez déjà sur les pointeurs. Vous n'avez pas toujours besoin de savoir à propos de pointeurs longs; ils sont devenus hors de propos lorsque Windows 95 a été introduit en 1995. Ils sont un vieux DOS/Win16 chose qui compte lors de l'architecture des microprocesseurs a été différent. Rien de plus qu'une curiosité de l'histoire maintenant.FALSE
n'est pas défini dans la norme. Seulementfalse
est.true
etfalse
sont appelés "littéraux Booléens", et sont les mots clés de C++.FALSE
est parfois défini comme une macro. Vous ne pouvez pas compter sur elle étant présent sur conforme aux normes de l'environnement car il ne fait pas partie de la norme.En d'autres termes, le programme suivant est valide
C++
:et il apparaîtra à l'impression
0 1
comme prévu.FALSE
n'est pas un privilégié symbole.TRUE
etFALSE
peut être définie (généralement sous forme d'une macro, parfois comme unenum
valeur), mais vous ne pouvez pas compter sur elle. AvecGCC
sur Linux par exemple,bool something = FALSE;
est une erreur de compilation carFALSE
n'est pas défini. LorsqueFALSE
est défini, il sera généralement définie comme0
oufalse
- mais ce n'est pas quelque chose que vous devez compter sur. S'appuyer sur les normes.typedef int BOOL;"
ou "typedef unsigned char BOOL;
". Encore une fois, c'est un report de C quand il n'y a pas de type pour représenter des valeurs Booléennes.#define false true
WOW!en C++, faux est un construit-dans le sens littéral de type booléen représentant la valeur false (l'autre valeur possible est représenté avec le littéral vrai)
Le FAUX est un #define dont la définition dépend de la plate-forme, mais en général, elle est de 0.
FALSE
peut-être un type Booléen, mais généralement c'est un type intégral. Vous pouvez l'utiliser comme une valeur Booléenne, mais il est toujours partie intégrante. Ceci est très important quand il s'agit de modèle de déduction et de surcharge de la fonction de résolution, par exemple.f(false)
etf(FALSE)
peuvent appeler deux complètement différentes fonctions siFALSE
étend à0
.false
est un C++ mot-clé.FAUX n'est pas défini par la norme C++. Mais la plupart des compilateurs de FAUX défini comme un préprocesseur macro avec la valeur 0.
Rappelez-vous juste ce que le vrai et le faux Booléens toujours dire. Ils sont toujours des nombres entiers (0,1). Un compilateur peut ne pas le reconnaître, mais ils vont toujours être stockés et exécutés par le PROCESSEUR comme des nombres entiers. Un débogueur affiche cette. Si elle est en majuscules ou pas n'a pas vraiment d'importance car il ne devrait pas être différent dans sa mise en œuvre ou l'utilisation. Si vous le compilateur a quelques macros écrites pour soutenir à la fois supérieur et inférieur cas de vrai et de faux, puis grand, mais il est juste de s'adapter à vos besoins. Juste comme tous les autres types.
Note importante sur les API Windows: certaines Fenêtres de la bibliothèque de retour des fonctions arbitraires des valeurs entières bien que le type de retour est définie comme
BOOL
. Il est préférable de ne jamais comparer unBOOL
àTRUE
. utilisation