说我有一个C++函数debugPrint(int foo)。我如何最方便地从发行版本中删除它?我不想用#ifdefs包围对debugPrint的每次调用,因为这确实很耗时。另一方面,我想100%确保编译器剥离对该函数的所有调用,并且该函数本身来自发行版。如果剥离是通过函数调用产生的参数调用的,则剥离也应发生。例如debugPrint(getFoo());。在那种情况下,我也希望删除getFoo()调用。我知道可以选择函数内联,但是不能保证支持内联。

最佳答案

使用条件编译和宏:

#ifdef _DEBUG
   #define LOG( x ) debugPrint( x )
#else
   #define LOG( x )
#endif

为调试版本定义_DEBUG,而不为发布版本定义。现在发布
LOG( blahbhahblah );

将被扩展为空字符串-即使参数将不会被评估,也不会包含在发出的代码中。

您可以使用在调试版本中定义但在发行版中未定义的任何现有预处理器符号代替_DEBUG

09-29 21:18