调试和预处理器指令

问题描述 投票:0回答:3

为了调试,我在应用程序中多次调用调试日志函数。当然,在生产版本中,需要跳过这些调试调用。而不是写:

#if DEVEL == 1
    Log::debug(...);
#endif

围绕对调试函数的所有调用,我决定在调试函数本身中编写以下内容:

#if DEVEL != 1
    return;
#endif

编译器会避免无用函数调用的开销,还是出于性能原因使用(许多丑陋的)

#if #endif
构造会更好?

c++ c-preprocessor
3个回答
7
投票

不用担心优化器,您可以做一个简单的技巧:

#if DEVEL == 1
#define LOG_DEBUG(...) Log::Debug(__VA_ARGS__)  // variadic macro
#else
#define LOG_DEBUG
#endif

现在到处使用

LOG_DEBUG
以保持简单。


5
投票

如果该函数可用于内联(例如,它是在标头中实现的),那么优化器将毫无困难地摆脱函数调用,从而不会给您带来任何开销。


2
投票

你为什么不检查一下?

使用 gcc 只需使用

-S
进行编译,然后查看输出。

© www.soinside.com 2019 - 2024. All rights reserved.