5

Al usar una instrucción como #if TRUE, ¿qué debo esperar que ocurra? ¡Una explicación sería muy apreciada! Entiendo cómo funciona #if 1, pero da un resultado COMPLETAMENTE diferente en mi código que usando #if TRUE. Entiendo que #if es una directiva condicional, y lo que eso implica; es solo la parte TRUE (o FALSE) que no entiendo. Parece como si al usarlo de esta forma nunca se ejecutara código después de la declaración. Aquí está un ejemplo:C++, usando la directiva condicional #if VERDADERO

#if TRUE 
    cout << "true" << endl; 
#endif 

#if FALSE 
    cout << "false" << endl; 
#endif 

nunca parece ver "verdadero" o "falso" impreso a la pantalla y utilizando Visual Studio, el comunicado interno está atenuado automáticamente.

+0

Simplemente prueba si las macros están declaradas. Por lo general, en WinDef.h están declarados para ser utilizados con BOOL. –

+0

¿"VERDADERO" no es una palabra reservada? – Hieli

+2

No, solo se trata de una macro declarada con #define win WinDef.h (vea http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx). La palabra reservada es "verdadera" (minúsculas). –

Respuesta

5

El preprocesador incluirá/excluirá el contenido de un bloque #if #endif dependiendo de si la expresión después de #if se evalúa como verdadera o falsa.

#if TRUE solamente se evaluará como true si

  • la macro TRUE se define
  • el valor de TRUE! = 0

En su ejemplo ni TRUE ni FALSE se definen por lo que ambos bloques son falsos y excluidos

+0

¡Muchas gracias! Esto fue muy útil. – Hieli

0

Para ver true o false impresos que necesita para definirlos:

#define TRUE 1 
#define FALSE 1 

Ahora #if TRUE y #if FALSE será el mismo que #if 1.

+1

Creo que es la primera vez que veo 'FALSO' definido como 1 ... – FatalError

+0

Se ha modificado la respuesta para definir FALSE como 0 –

+0

Pero luego la declaración después de que no es más verdad;). – FatalError

4

TRUE y FALSE son macros en Windows, pero declaró en WinDef.h.

Si se incluye la cabecera, se verá que es TRUE1 y FALSE es 0. Entonces, la primera declaración debería ejecutarse, la segunda no debería.

Si no incluye el encabezado, ambos estarán indefinidos y ninguno de los enunciados se ejecutará.

+0

¡Muy apreciado! ¡Gracias! – Hieli

Cuestiones relacionadas