如何在C上实现一组函数?

时间:2013-12-13 12:12:23

标签: c compiler-errors function-pointers

我正在尝试实现一个解释器。我喜欢用GCC的第一类标签来制作线程代码,但这次我应该坚持一个标准,所以我自然会留下功能表。所以,我这样做:

unsigned short int FUN_TABLE[MAX_FUN] (void*);

我希望用函数填充它们,每个函数都获得指向其操作数的指针,完成其工作,将内存中整个指令的长度返回给调度程序。

问题是,由于以下错误,我甚至无法编译它:declaration of FUN_TABLE as array of functions。考虑到这正是我想要实现的,为什么这是一个错误,我为什么要关注它,如果我不应该,如何以优雅和标准化的方式压制它?

3 个答案:

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

功能阵列不合法。最容易解决的问题是函数的指针数组 - 但这意味着从数组中指向的每个函数都具有相同的签名。