我已经看到代码在每个函数的开头做这样的事情:打印函数名称,以及每个参数名称和值,以帮助记录和调试目的。我想知道是否有任何自动化方法。例如,在下面的代码中是否可以(... "%d, %d", x, y)
用一些宏或其他工具替换?非常感谢。
void foo(int x, int y)
{
trace(__FUNCTION__, "%d, %d", x, y);
...
}
如果有一些__args__
变量/宏,这可能是可能的。但是,无论您选择哪种规范,C 或 C++ 标准中都没有这样的东西。__FUNCTION__
您可以在这里做的唯一一件事是通过定义一个像这样的宏(C99+ 或 C++11+)来摆脱一些输入:
#define TRACE(fmt, ...) trace(__FUNCTION__, fmt, __VA_ARGS__);
不幸的是,没有任何技巧可以让您在不将它们一一提供给trace
or的情况下获取参数名称和值TRACE
,至少在任何现有的 C 或 C++ 标准中都不会。有一天,C++ 中可能会出现一些反射特性,但你至少还得再等几年。