我正在尝试实现一个解释器。我喜欢用GCC的第一类标签来制作线程代码,但这次我应该坚持一个标准,所以我自然会留下功能表。所以,我这样做:
unsigned short int FUN_TABLE[MAX_FUN] (void*);
我希望用函数填充它们,每个函数都获得指向其操作数的指针,完成其工作,将内存中整个指令的长度返回给调度程序。
问题是,由于以下错误,我甚至无法编译它:declaration of FUN_TABLE as array of functions
。考虑到这正是我想要实现的,为什么这是一个错误,我为什么要关注它,如果我不应该,如何以优雅和标准化的方式压制它?
答案 0 :(得分:2)
你可以像这样定义一个函数指针数组(伪代码):
int (*funcArr2[10])(param, param, ...) = {NULL};
但是,您应该意识到这意味着所有这些函数都具有相同的参数集。你不能声明一个带有函数指针的数组,以便根据它们的签名来完成不同的函数。
答案 1 :(得分:2)
GCC告诉你:“没有一系列功能”。
考虑到这正是我想要实现的目标,为什么这是一个错误,我为什么要注意
因为您正在尝试实现C语言中不存在的功能。但相反,您可以通过一系列函数指针实现所需的功能。
声明函数指针的语法是
return_type (*func_ptr_name)(parameters)
和声明函数指针数组的语法是
return_type (*func_ptr_name[n])(parameters)
由于该语法非常模糊,您不会想要使用它。解决方案是使用typedef:
typedef unsigned short (*func_table_t)(void*);
// declare an array of function pointers, using readable syntax:
func_table_t func_table [MAX_FUNC] =
{
&some_function,
&some_other_function,
...
};
答案 2 :(得分:1)
功能阵列不合法。最容易解决的问题是函数的指针数组 - 但这意味着从数组中指向的每个函数都具有相同的签名。