假设我有一个C++函数debugPrint(int foo).我怎样才能最方便地从发布版本中删除它?我不想用#ifdef包围每次调试debugPrint,因为它真的很耗时.另一方面,我希望100%确保编译器剥离对该函数的所有调用,并从发布版本中删除函数本身.如果使用函数调用产生的参数调用它,也应该发生剥离.例如,debugPrint(getFoo());. 在这种情况下,我也希望剥离getFoo()调用.我理解函数内联可能是一种选择,但不保证支持内联.
sha*_*oth 13
使用conditinal编译和宏:
#ifdef _DEBUG
#define LOG( x ) debugPrint( x )
#else
#define LOG( x )
#endif
Run Code Online (Sandbox Code Playgroud)
定义_DEBUG调试版本,而不是为发布版本定义它.现在发布版本
LOG( blahbhahblah );
Run Code Online (Sandbox Code Playgroud)
将被扩展为空字符串 - 即使参数也不会被评估,也不会包含在发出的代码中.
您可以使用在调试版本中定义但未在发行版中定义的任何现有预处理器符号,而不是_DEBUG.
使函数内联,函数内部有#ifdef,如下所示:
inline void debugPrint(whatever_t wtvr)
{
#ifdef DEBUG
Logger::log(wtvr);
#endif
}
Run Code Online (Sandbox Code Playgroud)
这样,优化器将在保持代码清洁的同时剥离空函数.
| 归档时间: |
|
| 查看次数: |
2111 次 |
| 最近记录: |