不兼容的指针类型传递' char *(char *)'参数类型' VALUE(*)()'

时间:2015-01-09 23:49:52

标签: c ruby

我需要使用C代码扩展我的ruby代码。我在我的c文件上有这个功能:

char * generateIt(char *valor) {
  struct NESSIEstruct w;
  u8 digest[DIGESTBYTES];

  int i;
  for(i=0; valor[i]!='\0'; ++i);
  int sizeo = i;

  NESSIEinit(&w);
  NESSIEadd((u8*)valor, 8*sizeo, &w);
  NESSIEfinalize(&w, digest);
  return displayIt(digest, DIGESTBYTES);
}

为了让它可用于Ruby,在同一个文件中,我有这个:

void
Init_whirlpool(){
  rb_mWhirlpool = rb_define_module("Whirlpool");
  rb_cClass = rb_define_class_under(rb_mWhirlpool, "Class", rb_cObject);
  rb_define_method(rb_cClass, "generate", generateIt, 1);
}

但是,当我尝试运行:make时,我收到此警告:

  

MacBook-Pro-de-Patricio:whirlpool psantos $ make compiling whirlpool.c   whirlpool.c:2021:43:警告:不兼容的指针类型传递' char   *(char )'参数类型' VALUE()()' [-Wincompatible-pointer-types] rb_define_method(rb_cClass,   "生成",generateIt,1);                                             ^ ~~~~~~~~~ /Users / psantos / .rvm / rubies / ruby​​-2.0.0-p598 / include /ruby-2.0.0 / ruby​​ / ruby​​.h:1290:48:   注意:将参数传递给参数此处为void   rb_define_method(VALUE,const char *,VALUE(*)(ANYARGS),int);                                                  生成^ 1警告。

错误图片:(更清楚)

enter image description here

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

rb_define_method()采用Ruby VALUE类型。

void rb_define_method(
    VALUE klass, 
    const char *name, 
    VALUE (*func)(ANYARGS), 
    int argc
);