如有需要,请RTFM我,因为到目前为止我可能一直在寻找错误的东西!

在Arduino上

 Serial << "sdf" << var;

工作款待(引用streaming.h),但是
#if (CRIPWEB_DEBUG_BITS & DEBUG_CMD)
    Serial <<  F("Run Macro: ") << strMacro << "\n";
#endif

占用三行,使代码不可读。

我想说些类似的话:
Debug(CRIPWEB_DEBUG_BITS & DEBUG_CMD) << F("Run Macro: ") << strMacro << "\n";

这可能吗?我会更高兴:
Debug.set(CRIPWEB_DEBUG_BITS & DEBUG_CMD); Debug << F("Run Macro: ") << strMacro << "\n";

我尝试过后会担心大小!

非常感谢,
格林

最佳答案

预处理器将是编译时的,其他则不是。您真的要放慢脚步吗?

无论如何,如果您接受稍微不同的语法,那么我们将非常接近您想要的内容,同时又不放弃在编译时消除无用的代码:

#define COND(cond, ...) ((void)((exp) && (__VA_ARGS__, 0)))

用于
COND(CRIPWEB_DEBUG_BITS & DEBUG_CMD, Serial <<  F("Run Macro: ") << strMacro << "\n");

或者,如果您只测试过一种情况:
#define IFDEBUG(...) ((void)((CRIPWEB_DEBUG_BITS & DEBUG_CMD) && (__VA_ARGS__, 0)))

用于
IFDEBUG(Serial <<  F("Run Macro: ") << strMacro << "\n");

10-02 01:02