gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:48 25 4
gpt4 key购买 nike

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

我想过有一个内部对象负责进行 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com