假设我有:
func1()
{
int var = something;
func2(var); /* Call func2() with var as I/P parameter */
......
......
}
func2 (int var)
{
.....
}
我们可以使用__FUNC__
在跟踪中打印func2
的名称。
但有没有办法打印(inside f2())
调用函数中使用的变量NAME(即f1()
)来调用此函数:
痕迹中的某些东西(f2()
内),如:
func2(var)
答案 0 :(得分:1)
好吧,你可以修改函数来输入字符串:
#ifdef INCLUDE_PARAM_TRACE
#define func2(a) _func2(a, #a)
#endif
#ifdef INCLUDE_PARAM_TRACE
void _func2(int a, const char * param_string)
#else
void func2(int a)
#endif
但是,除非您非常注意定义方法的方式和位置,否则很快就会变得很乱: - )
答案 1 :(得分:0)
c标准没有提供这样的标准宏 如果编译器提供任何此类宏作为扩展,则需要检查编译器的文档 请注意,即使您为编译器找到了一个,使用它也意味着您的代码在编译器中不可移植。
答案 2 :(得分:0)
您可以在不同功能之间发送__func__
#include <stdio.h>
void f2(int v, const char *parent) {
printf("value from %s is %d\n", parent, v);
}
void f1(void) {
f2(42, __func__);
}
int main(void) {
f1();
return 0;
}
请参阅在ideone上运行的代码:https://ideone.com/faGfT
答案 3 :(得分:0)
没有。请考虑该参数可能甚至没有名称:
func2(5 + 6);