如果未定义,将不会编译函数的宏
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())
也将被彻底淘汰
当前用于在调试模式下显示调试输出:
#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())
也将被彻底淘汰