Wesley
Wesley

Reputation: 3111

Can Boolean operators be used with the preprocessor?

Is it possible to have a preprocessor OR or AND statement? I have this code where I want to run under _DEBUG or _UNIT_TEST tags(?).

I want something like the following:

#if _DEBUG || _UNIT_TEST
  // Code here
#endif

If this is not possible, is there a workaround to achieve the same thing without having to duplicate the code using a #elseif?

Upvotes: 94

Views: 70385

Answers (3)

Roman Starkov
Roman Starkov

Reputation: 61512

#if takes any C++ expression of integral type(1) that the compiler manages to evaluate at compile time. So yes, you can use || and &&, as long as you use defined(SOMETHING) to test for definedness.

(1): well, it's a bit more restricted than that; for the nitty-gritty see the restrictions here (at "with these additional restrictions").

Upvotes: 17

AshleysBrain
AshleysBrain

Reputation: 22621

#if defined(_DEBUG) || defined(_UNIT_TEST)
  //Code here
#endif

Also for the record, it's #elif, not #elseif.

Upvotes: 15

Kirill V. Lyadvinsky
Kirill V. Lyadvinsky

Reputation: 99665

#if defined _DEBUG || defined _UNIT_TEST 
  //Code here 
#endif 

You could use AND and NOT operators as well. For instance:

#if !defined _DEBUG && defined _UNIT_TEST 
  //Code here 
#endif 

Upvotes: 136

Related Questions