简而言之,我要做的是使程序的调试版本输出其他信息。但不必检查

#IFDEF DEBUG
...
#ENDIF


在高级代码中间,我更愿意做这样的事情

Debug::PrintDebugMessage(...);


所以我的问题是,如果我像这样做这个假设功能

inline static void PrintDebugMessage(...);
void PrintDebugMessage(...)
{
   #IFDEF DEBUG
   ...
   #ENDIF
}


未定义DEBUG时,结果程序会发生变化吗?也就是说,如果在未定义DEBUG的情况下调用了此函数,那么在低级代码方面会发生任何事情,还是编译器会简单地忽略空白函数? (如果我对此措辞混乱,我深表歉意)

最佳答案

为什么不仅仅实现PrintDebugMessage(...)宏呢?

您定义:

#ifdef _DEBUG
#  define PrintDebugMessage(...) \
     <Implement>
#else
#  define PrintDebugMessage(...)
#endif


在发行二进制文件中不会生成任何代码,但更重要的是,您可以使用__LINE____FILE__宏以及__func__函数。这些对于调试非常有用,但仅在宏中有用。

10-07 18:43