给出像
这样的功能toString
现在void f(int a, int b, char c) {
---macro here----
}
应该有类似的输出
DBG_ARGS
我们可以使用f(a = 1, b = 2, c = A)
,VA_LIST
和#x
来完成此任务吗?
答案 0 :(得分:1)
在一般情况下,我认为你不能单独用直接宏来做这件事,但你可以通过调用另一个函数来做到这一点。
如果查看backtrace
的{{3}},您将找到一个特定于glibc的例程来转储堆栈。如果从当前函数X调用另一个函数Y,并且该函数转储堆栈,那么堆栈转储的第二行将是函数X的参数(确保编译器没有内联函数)。
可悲的是,这种方法不是特别便携。 OS-X和Linux有不同的backtrace
类型实现,我确信Windows也是如此。
va_list
- esque宏仅适用于可变参数函数。您提供的示例不是可变参数函数。我并不完全清楚VA_LIST
(大写)是什么(也许是编译器特定的),但谷歌暗示它几乎是一样的。