Question: I have a preprocessor directive that I do not set, so I cannot change it, it is either true or false.

Normally I would have done :

```
#ifdef DIRECTIVE
// code
#endif

```

But this will always run, since `DIRECTIVE` is always defined.

Is there a way that I can do basically the equivalent of:

```
#if DIRECTIVE
#endif

```

I guess I could do

```
bool DirectiveValue = DIRECTIVE;
if (DirectiveValue){

}

```

But I was really hoping the second code block was possible in some way.

Thanks for any insight!

Answer: 
The preprocessor has an `#if` statement, so you can do things like: `#if DIRECTIVE`, which (just like in C normally) tests as false if the value of he expression is zero, and true if the value of the expression is non-zero.

Although it's not clear whether it provides a real advantage for you, there's also a kind of intermediate form: `if constexpr (DIRECTIVE)`, which is evaluated at compile time, no run time, so it resembles an `#if` to some degree in that way--but still using normal C++ syntax, and integrated with the language in general, instead of being its own little thing with slightly different rules than the rest of the compiler.
you can evaluate a boolean statement after the `#if` so this code is valid:

```
#if (DIRECTIVE == true)
// code
#endif

```

---

If you have more complicated checks, worth noting is the `defined` keyword, which returns 0 or 1 if a symbol is defined. This and the ability to write boolean statements allows you to create checks like this:

```
#define DIRECTIVE_A
#define DIRECTIVE_B

#if defined(DIRECTIVE_A) && defined(DIRECTIVE_B)
// code
#endif

```