如何调用指向typedef结构中定义的函数的指针

时间:2010-08-09 20:25:12

标签: c function-pointers

以下代码有什么问题?
下面的parseCounter1()和parseCounter1()是两个函数 我把他们的指针放在const OptionValueStruct中,这样就可以了 当option_values []的每个元素都可以相应地调用它们 经历了:

typedef struct OptionValueStruct{  
    char counter_name[OPTION_LINE_SIZE];  
    int* counter_func;  
} OptionValueStruct_t;  

const OptionValueStruct option_values[] = {    
    {"Counter1", (*parseCounter1)(char*, char**)},  
    {"Counter2", (*parseCounter2)(char*, char**)},  
   };  

const OptionValueStruct *option = NULL;

for(int i = 0; i< sizeof(option_values)/sizeof(OptionValueStruct_t); i++){
    option = option_values + i ;  
    result = option->counter_func(opt_name, opt_val);  
}  

2 个答案:

答案 0 :(得分:8)

您已将counter_func成员声明为指向int的指针,而不是函数指针,而您在option values中有类似于函数指针声明的内容。这是你想要的(假设你的返回类型是int)

typedef struct OptionValueStruct{
  char counter_name[OPTION_LINE_SIZE];
  int (*counter_func)(char*, char**);
} OptionValueStruct_t;

const OptionValueStruct_t option_values[] = {
  {"Counter1", parseCounter1},
  {"Counter2", parseCounter2},
};

for(int i = 0; i< sizeof(option_values)/sizeof(OptionValueStruct_t); i++){
  result = option_values[i]->counter_func(opt_name, opt_val); 
  // don't know what you relly want to do with result further on..
}

答案 1 :(得分:0)

如果您正在编译为C代码(正如您的代码所示),那么您应该将option_values[]option的类型更改为OptionValueStruct_t。但是,在C ++中,这没关系。

或者,您可以从自定义类型名称中删除尾随_t