调试和预处理器指令

时间:2011-06-12 07:23:47

标签: c++ compiler-construction c-preprocessor

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

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

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

#if DEVEL != 1
    return;
#endif

编译器是否会避免无用函数调用的开销,或者出于性能原因使用(许多丑陋)#if #endif构造会更好吗?

3 个答案:

答案 0 :(得分:7)

您可以做一个简单的伎俩,而不是担心优化器:

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

现在在任何地方都使用LOG_DEBUG来保持简单。

答案 1 :(得分:5)

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

答案 2 :(得分:2)

你为什么不检查?

使用gcc编译-S,然后查看输出。