C++, using #if TRUE conditional directive
-
14-06-2021 - |
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.
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
.