如果未定义,将不会编译函数的宏

Macro which will not compile the function if not defined

当前用于在调试模式下显示调试输出:

#ifdef _DEBUG
#define printX(...) Serial.printf( __VA_ARGS__ )
#else
#define printX(...) NULL
#endif 

然而结果代码中仍然包含 printX,并且应用的参数仍然消耗内存、cpu 电源和堆栈大小,所以我的问题是:

宏不是函数。它不消耗任何内存、cpu 电源或堆栈大小。这是因为宏完全在编译时运行,只是充当文本替换机制。当程序是运行时,没有被“调用”的宏。

在我的程序中,我包含一行内容:

#define DEBUG_MODE

我在任何我想使用(或不使用)调试模式编译的地方使用它:

#ifdef DEBUG_MODE
    print here all the info I need for debug and certainly don't want in released binary.
#endif

在发布最终的二进制文件之前,我注释掉了定义行。

#define printX(...) NULL

printX 函数调用及其所有参数替换为纯 NULL。这是在编译器能够查看代码之前发生的文本替换,因此 printX 中的任何嵌套调用,例如

printX(someExpensiveCall())

也将被彻底淘汰