1

我目前正在完成一个库,并希望我的“调试”日志功能在编译时是可选的。

我的想法是:检查是否DEBUG已定义,然后定义我的自定义debug函数。

这是我所做的(部分)

#if defined(DEBUG)
    #define debug(s) Serial.println(s)
    #define debug(s,t) Serial.print(s);Serial.println(t)
#else
    #define debug(s) // s
    #define debug(s,t) // s t
#endif

(我正在为 Arduino 编译;这就是为什么我需要将函数一分为二。)

由于我使用了很多时间,Serial.print随后是 a Serial.println,我想要那个debug(s),也接受了两个“参数”。

因此,插入debug("ParamOne");anddebug("ParamOne", "ParamTwo");将导致定义的函数。

但是,显然,只有最后定义的调试是有效的,覆盖了第一个。

我应该怎么做,以保持函数的相同名称,或者有什么更“正确”的方法吗?

4

1 回答 1

6

#define 宏名称是唯一的,这些不是函数定义,因此您的第二个 #define 将覆盖第一个。你可能想做类似的事情

#if defined(DEBUG)
    inline void debug(const char *s) { Serial.println(s); }
    inline void debug(const char *s, char *t) { Serial.print(s);Serial.println(t); }
#else
    inline void debug(const char *s) {  }
    inline void debug(const char *s, const char *t) { }
#endif
于 2013-03-31T21:54:18.617 回答