점프 테이블 사용법에 대한 몇 가지 예를 들어주세요. 나는 위키 피 디아에이 예제를 보았다 :C의 점프 테이블 예제
#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()
같은 것을 할 수있는 함수를 호출 할 때?
"인덱스를 사용하면 함수 자체의 이름을 사용할 수 있습니다."찾고있는 것은 상위 레벨 언어 또는 해시 테이블 중 하나입니다. 해시 테이블은 string -> function pointer가 될 것입니다. – Corbin
함수 자체의 이름으로 호출하려는 경우 왜 처음에는 점프 테이블이 필요합니까? –
마지막 예제를 실제로 읽지는 않았지만 지금은 방금 했었습니다. @PavanManjunath가 요점을 가지고 있다고 생각합니다. 너 정확히 뭘 하려구? 나는 당신이 char *를 취하고 그것을 기반으로 함수를 호출하기를 원한다고 생각했다. PHP에서와 마찬가지로 $ func = "strtolower"; echo $ func ('CORBIN') ;. – Corbin