Pergunta

When using a statement like #if TRUE, what should I expect to happen? An explanation would be very appreciated! I understand how #if 1 works, but it gives a COMPLETELY different result in my code than using #if TRUE. I understand #if is a conditional directive, and what that implies; it's just the TRUE (or FALSE) part that I don't understand. It seems as though using it in this way never executes code following the statement. Here is an example:

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

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

I never seem to see "true" or "false" printed to screen and using Visual Studio, the inner statement is automatically grayed out.

Foi útil?

Solução

The preprocessor will include/exclude the contents of an #if #endif block depending on wether the expression after #if evaluates to true or false.

#if TRUE will only evaluate to true if

  • the macro TRUE is defined
  • the value of TRUE != 0

In your example neither TRUE nor FALSE are defined so both blocks are false and excluded.

Outras dicas

TRUE and FALSE are macros in Windows, but declared in WinDef.h.

If you include the header, you'll see that TRUE is 1 and FALSE is 0. So, the first statement should execute, the second should not.

If you don't include the header, both will be undefined, and neither of the statements will be executed.

To see true or false printed you need to define them:

#define TRUE 1
#define FALSE 1

Now #if TRUE and #if FALSE will be the same as #if 1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top