微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个带有函数指针数组的代码,它表示一个函数序列,我想像这样显示函数名称

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__获取函数名称,但是是否有一种技巧可以在函数本身之外使用函数指针来执行相同操作?

解决方法

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

这是一种创造性的方法:

  • 将您的函数签名从返回 void 更改为返回 const char*
  • 当两个参数都是空指针时,更改函数本身以将其名称作为 const char* 字符串返回。
  • 以空指针为参数调用函数
  • 利润!
,

一般来说这是不可能的。

您可以做的最接近的事情是使用宏来生成 if 的序列,而不必将每个名称重复两次。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。