3 ms·
Ask HN: Is there a C++2x way to do ifdef endif without pre-processor?
Context:
For release builds I want all verbose and lower log calls omitted from code
Ex:
LOG_VERBOSE(...) // macro
LOG_DEBUG(...); // macro
where the macros are wrapped in a #ifdef such that it is removed depending on what -D is built with?
ex. Building with -DLOG_LEVEL=6
enables LOG levels 0..6 for debug releases but -DLOG_LEVEL=1 only allows error, warnings stripping everything else out of the .o file.
- AlotOfReading 3y agoThe "only C++" way would be std::enable_if, but it's a lot less ergonomic for a debug library (and harder to read) than a simple preprocessor macro. There's a reason logging libraries use the preprocessor macro approach here. If you really want to avoid any manual preprocessor magic, maybe consider Boost PP?
- lesserknowndan 3y agoCould you rely on optimisation to strip out the code i.e. would a call to the following function be optimised out by the optimiser? void log_debug( … ) { if ( LOG_LEVEL >= 6 ) { // logging stuff here. } }