我使用了锈蚀绑定来生成锈蚀接口代码。
现在,在C代码中,您可以找到以下内容:
extern const struct mps_key_s _mps_key_ARGS_END;
#define MPS_KEY_ARGS_END (&_mps_key_ARGS_END)注意,在代码的其余部分,_mps_key_ARGS_END不会再次出现。
宏MPS_KEY_ARGS_END经常用于其他模拟mps_key_s。
现在,锈菌绑定产生的代码如下:
pub static _mps_key_ARGS_END: Struct_mps_key_s;现在在C代码中有一个示例用法:
extern void _mps_args_set_key(mps_arg_s args[MPS_ARGS_MAX], unsigned i,
mps_key_t key);
_mps_args_set_key(args, 0, MPS_KEY_ARGS_END);在锈病中它看起来是这样的:
pub fn _mps_args_set_key(args: [mps_arg_s, ..32u], i: ::libc::c_uint,
key: mps_key_t);现在我试着这样称呼它:
_mps_args_set_key(args, 0 as u32, _mps_key_ARGS_END );但我发现了一个错误:
错误:不匹配类型:预期的
*const Struct_mps_key_s,发现的Struct_mps_key_s(预期*-ptr,找到枚举Struct_mps_key_s)
我不是一个优秀的C程序员,我甚至不知道这些C静态值是从哪里得到的。
谢谢你的帮助。
编辑:
根据克里斯·摩根的回答更新。
我添加了以下代码(注意,我将*const mps_key_s替换为mps_key_t):
pub static MPS_KEY_ARGS_END: mps_key_t = &_mps_key_ARGS_END;关于我为什么使用mps_key_t的额外信息,用C语言表示:
typedef const struct mps_key_s *mps_key_t;生锈的:
pub type mps_key_t = *const Struct_mps_key_s;这个接缝比以前更好地接缝了,但现在我遇到了严重的事故:
错误:内部编译器错误:意外失败注意:编译器遇到意外故障路径。这是个窃听器。注意:我们希望得到一个bug报告: /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libsyntax/ast_map/mod.rs:327:http://doc.rust-lang.org/complement-bugreport.html备注:运行与
RUST_BACKTRACE=1一起执行的回溯任务'rustc‘在“预期项,找到外部项_mps_key_ARGS_END::_mps_key_ARGS_END (id=1102)”处失败
发布于 2014-10-27 03:24:54
#define MPS_KEY_ARGS_END (&_mps_key_ARGS_END)&部分表示它正在接受指向对象的指针,MPS_KEY_ARGS_END的类型将是mps_key_s const*。在Rust中,这是*const mps_key_s (一个原始指针),可以以与C、&_mps_key_ARGS_END相同的方式实现。您可以以这样的方式定义MPS_KEY_ARGS_END,您可以这样方便地使用:
static MPS_KEY_ARGS_END: *const mps_key_s = &_mps_key_ARGS_END;https://stackoverflow.com/questions/26580694
复制相似问题