I wondering if 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(?).
What I want is 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
?
In C preprocessor, a character sequence enclosed by quotes is considered a token and its content is not analyzed. This means that macro names within quotes are not expanded. If you need an actual argument (the exact sequence of characters within quotes) as a result of preprocessing, use the # operator in macro body.
Ans: #elseif is not any preprocessor directive, but #elif is.
All Preprocessor directives begin with the # (hash) symbol. C++ compilers use the same C preprocessor. The preprocessor is a part of the compiler which performs preliminary operations (conditionally compiling code, including files etc...) to your code before the compiler sees it.
#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
#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").
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With