C定义:static void(* var_name)();

时间:2012-10-12 22:55:29

标签: c methods

我下载了用C编写的代码示例,但不理解一条指令。此外,w 如果我尝试编译代码,编译器会在我不理解的行中抛出错误。

代码:

// Global vars
static int getting_text = 0;
static char *the_text;  // Definition Part
static void (*text_entered)();  // Definition Part 2


// method
int add_text(unsigned char key)
{
  char msg[] = "x";
  int len;

  if(!getting_text) return 0;
  if(key==8) /* backspace */
  {
    len = strlen(the_text);
    the_text[len-1] = '\0';
  }
  else if(key==13 || key==9) // cr or tab ends
  {
    getting_text = 0;
    text_entered(the_text); // Execution Part
  }
  else
  {
    msg[0] = key;
    strcat(the_text, msg);
  }

  glutPostRedisplay();

  return 1;
}

编译器抛出一个错误,指出方法调用中有太多参数。但我不知道如果它是静态void(* xxx)()或其他东西的方法。

提前致谢。

1 个答案:

答案 0 :(得分:2)

编辑:以下仅适用于C ++。您是否使用g ++或其他C ++编译器而不是C编译器?

text_entered是一个函数指针,指向不带任何参数的函数,因此是错误,因为你传递了一个字符指针。我认为它应该改为,

static void (*text_entered)(char*);

这当然是假设text_enterered实际上被设置为一个带有char *参数的函数,并且它不仅被调用错误。