【发布时间】:2012-04-13 12:04:49
【问题描述】:
请给我一些跳转表使用的例子。我在维基百科上看到过这个例子:
#include <stdio.h>
#include <stdlib.h>
typedef void (*Handler)(void); /* A pointer to a handler function */
/* The functions */
void func3 (void) { printf( "3\n" ); }
void func2 (void) { printf( "2\n" ); }
void func1 (void) { printf( "1\n" ); }
void func0 (void) { printf( "0\n" ); }
Handler jump_table[4] = {func0, func1, func2, func3};
int main (int argc, char **argv) {
int value;
/* Convert first argument to 0-3 integer (Hash) */
value = atoi(argv[1]) % 4;
if (value < 0) {
value *= -1;
}
/* Call appropriate function (func0 thru func3) */
jump_table[value]();
}
但我想知道是否有另一种调用函数的方法,而不是使用所示的索引,在上面的例子中是jump_table[value]();
我想要实现的是,除了使用索引之外,还有一种方法可以使用函数本身的名称。
例如,假设我们在一个结构中拥有所有函数指针。
typedef struct _funcptrs
{
void func1();
void func2();
} funcptrs;
现在当我想调用该函数时,我可以执行funcptrs.func1() 之类的操作吗?
【问题讨论】:
-
"使用索引是否可以使用函数本身的名称" 您正在寻找的是高级语言或哈希表。哈希表将是字符串 -> 函数指针。
-
如果你想用函数本身的名字来调用,那你为什么首先需要一个跳转表呢?
-
我实际上并没有阅读您的最后一个示例,现在我刚刚阅读了,我相信@PavanManjunath 有一点。你到底想做什么?我假设你想要一个 char* 并基于它调用一个函数。就像在 PHP 中你可以做 $func = "strtolower";回声 $func('CORBIN');.
-
您为什么要这样做?除了另一个层次的间接性之外,它会给你带来什么?而且您提出的不再是跳表。
标签: c jump-table