c++ - 没有代码的内联函数会影响输出的二进制文件吗?

标签 c++ debugging inline c-preprocessor

所以,简而言之,我要做的是让我的程序的调试版本输出附加信息。但不必检查

#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__ 函数。这些非常适合调试,但仅在宏中有用。

关于c++ - 没有代码的内联函数会影响输出的二进制文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313841/

相关文章:

c++ - 使用 int vector 元素作为输入的递归方法类

c++ - Nvidia NPP nppiFilter 在与 2d 内核卷积时产生垃圾

c++ - Cuda有效地从字节数组复制到不同大小的共享内存元素

debugging - 如何在MSBuild 12.0/VS2013中调试项目文件?

android - 如何在 Eclipse ADT 中停止 adb 进程?

jQuery 按钮处理程序与内联 onClick

javascript - 如何在 JavaScript 中执行内联 for 循环,该循环未连接到变量

c++ - nghttp2-asio:在 header 中设置内容类型的正确方法

visual-studio - 如何在 Visual Studio 2008 中调试透明代理实例?

c++ - 在哪里/如何定义模板