gpt4 book ai didi

c - ruby 内联 : Error: too few arguments to function

转载 作者:行者123 更新时间:2023-11-30 17:42:18 26 4
gpt4 key购买 nike

我有以下 C 代码:

VALUE find_index(VALUE arr, VALUE num_elements, VALUE element){
....
}

....

VALUE array_distance(VALUE arr1, VALUE arr2){
long arr1_len = RARRAY_LEN(arr1);
VALUE *c_arr2 = RARRAY_PTR(arr2);
long i;
for(i = 0; i < arr2_len; i++){
long arr1_index = find_index(arr1, arr1_len, c_arr2[i]);
....
}
}

编译时出现以下错误:

In function ‘VALUE array_distance(VALUE, VALUE, VALUE)’:error: too few arguments to function ‘VALUE find_index(VALUE, VALUE, VALUE, VALUE)’

有人可以帮忙解决这里的问题吗?

最佳答案

如果你想在其他C代码里面使用你的C函数,你需要使用builder.c_raw而不是builder.c,因为RubyInline实际上试图使通过更改代码,您的生活会更轻松,以便您可以快速编写简单的函数。然而,这具有误导性,并且会阻止您从其他 C 函数内部调用 C 函数,因为方法签名已更改。这应该可以帮助您开始:

class Test
inline :C do |builder|
builder.c_raw <<-'EOC', :arity => 3
static VALUE
find_index(int argc, VALUE *argv, VALUE self) {
VALUE arr = argv[0];
VALUE num_elements = argv[1];
VALUE element = argv[2];
// actual code...
}
EOC

builder.c_raw <<-'EOC', :arity => 2
static VALUE
array_distance(int argc, VALUE *argv, VALUE self) {
long arr1_len = RARRAY_LEN(argv[0]);
VALUE *c_arr2 = RARRAY_PTR(argv[1]);
long i;

for(i = 0; i < arr2_len; i++){
VALUE[] find_index_argv = {arr1, arr1_len, c_arr2[i]};
long arr1_index = find_index(argc, find_indev_argv, self);
// more code...
}

// must have a return value!
return Qnil;
}
EOC
end
end

关于c - ruby 内联 : Error: too few arguments to function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20651415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com