0

イベントフックを追加するために、Ruby を C 拡張で拡張しようとしています。

残念ながら、次のエラーが表示されます。

timber.c:7: error: expected ‘)’ before ‘event’
timber.c: In function ‘timber_init_event_hook’:
timber.c:15: error: ‘timber_trap’ undeclared (first use in this function)
timber.c:15: error: (Each undeclared identifier is reported only once
timber.c:15: error: for each function it appears in.)
timber.c: At top level:
timber.c:21: error: expected ‘)’ before ‘event’
make: *** [timber.o] Error 1

私が書いたコード:

#include <ruby.h>
#include </Users/paulengel/.rvm/src/ruby-1.9.2-p180/node.h> // #include <node.h> raises `error: node.h: No such file or directory`

// Declarations

static void timber_init_event_hook();
static void timber_trap(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass);
VALUE timber_start(VALUE self);
void Init_timber();

// Definitions

static void timber_init_event_hook() {
  #if defined(RB_EVENT_HOOKS_HAVE_CALLBACK_DATA) || defined(RUBY_EVENT_VM)
    rb_add_event_hook(timber_trap, RUBY_EVENT_CALL | RUBY_EVENT_RETURN | RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN, 0);
  #else
    rb_add_event_hook(timber_trap, RUBY_EVENT_CALL | RUBY_EVENT_RETURN | RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN);
  #endif
}

static void timber_trap(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass) {
  rb_funcall(rb_mKernel, rb_intern("puts"), 1, rb_str_new2(event));
}

VALUE timber_start(VALUE self) {
  // Do something
}

void Init_timber() {
  VALUE mTimber = rb_define_module("Timber");
  timber_init_event_hook();
  rb_define_singleton_method(mTimber, "start", timber_start, 0);
}

誰かがこの問題を解決するのを手伝ってくれますか? 前もって感謝します。

4

1 に答える 1

1

編集:rb_event_t以外の名前を付けてみてくださいevent。C のキーワードではないことはほぼ間違いありませんが、発生しているコンパイル エラーは、そのタイプの問題と一致しているようです。

EDIT EDIT:明らかに実際の問題ではありませんが、エラーがこれらの2行にあるように見えます。

于 2012-08-03T23:09:11.650 に答える