如何在C中将Function的I / P参数作为变量打印

时间:2011-12-14 12:18:54

标签: c function

假设我有:

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)

4 个答案:

答案 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);