Si usted ha incluido windows.h
, a continuación, se FALSE
#defined como 0. TRUE
se #defined como 1. Es no un tipo booleano, que es un tipo entero. Windows también definió el tipo BOOL
, que en realidad es un tipo entero diseñado para acomodar los valores TRUE
y FALSE
.
Las secciones pertinentes del Código de windows.h
ser algo como esto:
#ifdef FALSE
#undef FALSE
#endif
#define FALSE 0
#ifdef TRUE
#undef TRUE
#endif
#define TRUE 1
typedef int BOOL, *PBOOL, *LPBOOL;
de Windows fue originalmente escrito en C, al igual que todas las aplicaciones de Windows originales. En ese momento, C no tenía un tipo booleano definido por el estándar. En cambio, los desarrolladores se vieron obligados a definir sus propias constantes booleanas. Para evitar el posible lío que podría causar, Microsoft decidió un estándar que se usaría para todas las aplicaciones de Windows.
Si está escribiendo aplicaciones de Windows, es posible que necesite utilizar los identificadores TRUE
y FALSE
. Varias de las funciones definidas en windows.h
aceptan parámetros booleanos (en realidad, ¡enteros!) Escritos como BOOL
o devuelven valores de ese tipo. C++, que está fuertemente tipado, puede quejarse si los coacciona al tipo booleano definido en el estándar del idioma. Para mayor coherencia, utilizo los identificadores anteriores en todas mis llamadas a las funciones de la API de Windows, y las true
y false
palabras clave ahora definidas por el estándar en todos los métodos que escribo yo mismo.
Realmente no hay ninguna razón para no usar FALSE
como se define en windows.h
. Pero no debe definirlo usted mismo en un archivo de encabezado propietario, como han mencionado otros, porque no hay garantía de que la definición se mantenga constante a lo largo del tiempo. Eso podría causar algunos errores bastante tontos, del tipo que califica para aparecer en el Daily WTF.
Mat's answer es 100% correcto que ni TRUE
ni están definidos por los estándares C o C++. Sin embargo, son estrictamente definidos por la API de Windows y se garantiza que no se modificarán. Su uso no producirá código C++ estrictamente multiplataforma que cumpla estrictamente con los estándares, pero eso rara vez es una preocupación cuando se escriben aplicaciones de Windows, ya que tampoco llamará a ninguna de las otras funciones en windows.h
.
¿Es esto en Windows? Entonces es un remanente de un tiempo C cuando no tenía booleanos reales y FALSO se definió a 0. – RedX
@RedX: quiere decir FALSO está definido por booleanos, entonces ¿qué pasa con falso? – RidaSana
No, 'FALSE' se definió así:' #define FALSE (0) ' –