如何使用函数指针写函数名?

How to write the name of a function using a function pointer?

我有这段代码,其中包含一个函数指针数组,表示一系列函数,我想像这样显示函数名称:

static void print_sequence(t_op_sequence *seq)
{
    int i;

    i = -1;
    while (++i < seq->size)
    {
        if (seq->sequence[i] == pa)
            ft_putendl("pa");
        else if (seq->sequence[i] == pb)
            ft_putendl("pb");
        else if (seq->sequence[i] == sa)
            ft_putendl("sa");
        else if (seq->sequence[i] == sb)
            ft_putendl("sb");
        else if (seq->sequence[i] == ss)
            ft_putendl("ss");
        else if (seq->sequence[i] == ra)
            ft_putendl("ra");
        else if (seq->sequence[i] == rb)
            ft_putendl("rb");
        else if (seq->sequence[i] == rr)
            ft_putendl("rr");
        else if (seq->sequence[i] == rra)
            ft_putendl("rra");
        else if (seq->sequence[i] == rrb)
            ft_putendl("rrb");
        else if (seq->sequence[i] == rrr)
            ft_putendl("rrr");
    }
}

包含灵活函数指针数组的t_op_sequence结构:

typedef void    (*t_operation)(t_stack *, t_stack *);

typedef struct  s_op_sequence
{
    size_t      size;
    t_operation sequence[];
}   t_op_sequence;

我的代码没有问题,但我想在没有所有 if/elseswitch 语句的情况下执行此操作。我知道在函数内部您可以使用 __func____FUNCTION__ 来获取函数的名称,但是是否有技巧可以做到这一点但使用函数指针,所以在函数本身之外?

一般情况下是不可能的

最接近的做法是使用宏生成 if 的序列,而不必重复每个名称两次。

与人们在回答和评论中所说的相反,这确实是可能的。

这里有一个创造性的方法:

  • 将函数签名从 returning void 更改为 returning const char*
  • 当两个参数都是空指针时,将函数本身更改为 return 它们的名称为 const char* 字符串。
  • 以空指针作为参数调用函数
  • 盈利!