【发布时间】:2013-10-22 11:38:40
【问题描述】:
我正在用 C 语言做一个 Forth 解释器。我无法决定如何更好地实现 Forth 字典。
struct Word {
struct Word* next;
char* name;
int* opcode;
// int arg_count;
}
struct Dictionary {
struct Word words;
int size;
}
opcode 是一个代码序列 - 单词的功能。所以每个 opcode[i] 对应于某个函数。我想它应该是一些带有元素 [opcodefunction pointer] 的表。但是如何实施呢?
我们不知道函数的大小。我们不能使用 void* (或者我们可以?)因为我们必须以某种方式只让操作码执行该函数。
我该怎么办?
【问题讨论】:
-
这一点都不清楚。将整数映射到函数指针的表是完全可能的。这里的具体问题是什么?
-
@OliCharlesworth,函数的签名不同
-
"结构词词;" (与“struct Word *words;”相反)通常不是一个好主意。
-
@greensher 在这种情况下,如果只有几个不同的函数类型,您可以使用联合,或者重写采用较少参数的函数以采用一些额外的参数以使其兼容,或者编写包装器职能。函数指针和空指针是不兼容的,你不能拥有一个通用的函数空指针。或者,完全忘记函数表并使用
switch。
标签: c function-pointers interpreter forth