Reputation: 3111
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
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
Reputation: 22621
#if defined(_DEBUG) || defined(_UNIT_TEST)
//Code here
#endif
Also for the record, it's #elif
, not #elseif
.
Upvotes: 15
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