如何使用函数指针写函数名?
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/else
或 switch
语句的情况下执行此操作。我知道在函数内部您可以使用 __func__
或 __FUNCTION__
来获取函数的名称,但是是否有技巧可以做到这一点但使用函数指针,所以在函数本身之外?
一般情况下是不可能的
最接近的做法是使用宏生成 if
的序列,而不必重复每个名称两次。
与人们在回答和评论中所说的相反,这确实是可能的。
这里有一个创造性的方法:
- 将函数签名从 returning
void
更改为 returning const char*
。
- 当两个参数都是空指针时,将函数本身更改为 return 它们的名称为
const char*
字符串。
- 以空指针作为参数调用函数
- 盈利!
我有这段代码,其中包含一个函数指针数组,表示一系列函数,我想像这样显示函数名称:
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/else
或 switch
语句的情况下执行此操作。我知道在函数内部您可以使用 __func__
或 __FUNCTION__
来获取函数的名称,但是是否有技巧可以做到这一点但使用函数指针,所以在函数本身之外?
一般情况下是不可能的
最接近的做法是使用宏生成 if
的序列,而不必重复每个名称两次。
与人们在回答和评论中所说的相反,这确实是可能的。
这里有一个创造性的方法:
- 将函数签名从 returning
void
更改为 returningconst char*
。 - 当两个参数都是空指针时,将函数本身更改为 return 它们的名称为
const char*
字符串。 - 以空指针作为参数调用函数
- 盈利!