2009-07-30 9 views
1

En regardant un code j'ai remarqué qu'un autre dev avait changé chaque instance de true à! False. Pourquoi le feriez-vous? thxMS VC++ 6: Pourquoi retourner! False plutôt que vrai?

+3

Pourquoi ne pas demander le gars qui a fait le changement? –

+1

* Je * ne le ferais pas. Faire une telle chose à travers une base de code est probablement une infraction suspendue. –

+0

Je dirais que si je change chaque instance de true à! False serait une infraction de suspension –

Répondre

9

Il n'y a aucune raison de écrivez! false au lieu de vrai.
Les mauvaises raisons peuvent inclure l'obscurcissement (rendant le code plus difficile à lire), les préférences personnelles, la recherche et le remplacement globaux mal considérés, et les manigances convertissant des valeurs booléennes en entiers.

Il est possible qu'une certaine confusion ait été provoquée par les définitions TRUE et FALSE dans Win32, qui ne sont pas de type booléen mais ints, et qui peuvent déclencher des avertissements lorsqu'elles sont utilisées dans des instructions booléennes. Principalement, tout ce qui n'est pas zéro est "vrai", mais si vous voulez vous assurer que "vrai" est toujours un en utilisant des entiers au lieu de booléens, vous voyez parfois des manigances comme ça. Ce n'est toujours pas une bonne raison ;-)

+0

D'accord. Il a probablement été dit une fois d'utiliser! FALSE lors de l'utilisation des macros TRUE/FALSE, mais je ne vois aucune raison de le faire avec un type de données bool. – Roel

4

Je n'en ai aucune idée et j'écris du C++ depuis un moment. Je soupçonne toutes les raisons pour lesquelles ils n'étaient pas bons.

+0

+1 pour de mauvaises raisons. Qu'est-ce qui fait que les gens se méfient des booléens? –

+0

Les booléens peuvent être faux aussi! – kenny

+0

@Steve: le fait qu'ils n'existaient pas à l'origine dans C. –

0

Je ne sais pas vraiment, mais peut-être vrai est pas 1 (quelque chose> 0) et FAUX est égal à zéro alors « pas faux » = 1 donc il sera dans un endroit sûr

+0

Désolé - cela aurait dû être clair - les types de données sont des booléens C++, afaik ceux-ci sont soit vrai = 1 ou faux = 0. – Cokes

+0

Je me souviens qu'il y a un type de données dans les fenêtres appelé BOOLEAN.Boolean variable (devrait être TRUE ou FALSE) .Ce type est déclaré dans WinNT.h comme suit: typedef BYTE BOOLEAN; –

3

Je pense que c'est une chose historique. IIRC il y avait un problème sur certains compilateurs C/C++ sachant ce que le compilateur utiliserait pour représenter comme vrai. Vous pouvez savoir que le faux est nul, donc le faux sera ce que l'actuel ABI aura comme vrai.

Généralement c'est redondant mais il y a quelques cas spéciaux où c'est utile mais je ne peux pas penser à un.

1

peut-être qu'il a obtenu tant de vrai et faux dans son code et il voulait le renverser facilement, il suffit d'utiliser la recherche de son rédacteur en chef et remplacer,

3

Il pourrait être nécessaire si la ligne

#define true false

juste arrivé être quelque part dans les en-têtes :)

+1

+1 aime celui-là. – kenny

+1

Toute personne qui écrit cela devrait être battu bien! – KTC

Questions connexes