c++ - 记录函数的返回值

标签 c++ logging

我想记录一个函数的返回值。问题是函数可能有很多退出点,我不想在每个退出点之前添加日志调用。

我想过有一个内部对象负责进行 Log 调用。但是,我仍然必须在每个 return 语句之前通知它有关返回值的信息。

我还考虑过创建一个在从函数返回之前调用记录器的宏。像这样的东西:

#define RETURN(ret) Logger.log(__FUNCTION__, ret); return ret;

但我想避免这样做。

关于如何轻松轻松地实现这一点,我还有其他想法吗?

谢谢

最佳答案

我不认为你可以更好更轻松地做到这一点。在这种情况下,我认为对源影响最小的解决方案是使用预处理器,但你不应该按照你的方式去做,因为它内置了超价。Fx:

if( done )
    RETURN(something);

扩展为:

if( done )
    Logger.log("function_name", something); return something;

这意味着something如果 done 则发送到日志为真,则something无论如何都会返回。

为了使扩展适合单个语句,它通常包装在 do { ... } while(0) 中这将使该示例记录并仅在 done 时返回是真的。

但是仍然有惊喜,因为宏参数被扩展了两次,考虑你写 RETURN(something++); 的情况然后它会扩展到Logger.log(__FUNCTION__, something++); return something++;这意味着不幸的副作用。这在 C 中是一个真正的问题,但在 C++ 中不是。这里的模板很方便:

 template<typename T>
 T const& log_and_return(char const* func, const T& value)
 {
      Logger.log(func, value);
      return value;
 }

 #define RETURN(value) return log_and_return(__func__, value)

注意它叫做__func__在标准中(不是 __FUNCTION__ )。

关于c++ - 记录函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33147175/

相关文章:

java - 在使用 Logback 记录计算数据时,我们应该使用 isDebugEnabled() 吗?

python - 如果我想捕获并记录(而不是引发)异常,KeyboardInterrupt 应该是唯一引发的异常吗?

node.js - Winston logger.info 不是函数

c++ - 如果存在哈希,加速 c++ unordered_map 插入?

c++ - 使用指针或引用检查是否包含对象

c++ - 用 g++ 编译 c++14 代码

python - Django:如何让日志记录工作?

c++ - boost::graph同构的使用

c++ - 将 vector 数组作为函数参数传递(值不会改变)

ios - 是否可以阅读特定于应用程序的警告消息?