5

Quando si utilizza una dichiarazione come #if TRUE, cosa devo aspettarmi che accada? Una spiegazione sarebbe molto apprezzata! Capisco come funziona #if 1, ma dà un risultato COMPLETAMENTE diverso nel mio codice rispetto all'utilizzo di #if TRUE. Capisco che #if è una direttiva condizionale e cosa implica; è solo la parte TRUE (o FALSE) che non capisco. Sembra che utilizzarlo in questo modo non esegua mai il codice seguendo la dichiarazione. Ecco un esempio:C++, utilizzando la direttiva condizionale #if TRUE

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

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

non ho mai sembra di vedere "vero" o "falso" stampato a schermo e utilizzando Visual Studio, l'istruzione interna è in grigio automaticamente.

+0

Basta testare se vengono dichiarate le macro. Solitamente in WinDef.h sono dichiarati per essere usati con BOOL. –

+0

"TRUE" non è una parola riservata? – Hieli

+2

No, è solo una macro dichiarata con #define win Winefef.h (consultare http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx). La parola riservata è "true" (minuscolo). –

risposta

5

Il preprocessore includerà/escluderà il contenuto di un blocco #if #endif in base a se l'espressione dopo #if restituisce true o false.

#if TRUE valuterà solo vero se

  • la macro TRUE è definito
  • il valore di TRUE! = 0

Nel tuo esempio non TRUEFALSE sono definiti in modo da entrambi i blocchi sono false ed escluse.

+0

Grazie mille! Questo è stato molto utile. – Hieli

0

Per vedere true o false stampato è necessario definirli:

#define TRUE 1 
#define FALSE 1 

Ora #if TRUE e #if FALSE sarà lo stesso di #if 1.

+1

Penso che sia la prima volta che ho visto 'FALSE' definito come 1 ... – FatalError

+0

Modificata la risposta per definire FALSE come 0 –

+0

Ma poi l'affermazione dopo non è più vero vero;). – FatalError

4

TRUE e FALSE sono macro in Windows, ma ha dichiarato in WinDef.h.

Se si include l'intestazione, vedrete che TRUE è 1 e FALSE è 0. Quindi, la prima affermazione dovrebbe essere eseguita, la seconda no.

Se non si include l'intestazione, entrambi saranno indefiniti e nessuna delle istruzioni verrà eseguita.

+0

Molto apprezzato! Grazie! – Hieli

Problemi correlati