首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C代码中的锈蚀调用C,静态const

C代码中的锈蚀调用C,静态const
EN

Stack Overflow用户
提问于 2014-10-27 03:14:31
回答 1查看 748关注 0票数 0

我使用了锈蚀绑定来生成锈蚀接口代码。

现在,在C代码中,您可以找到以下内容:

代码语言:javascript
复制
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

现在,锈菌绑定产生的代码如下:

代码语言:javascript
复制
pub static _mps_key_ARGS_END: Struct_mps_key_s;

现在在C代码中有一个示例用法:

代码语言:javascript
复制
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);

在锈病中它看起来是这样的:

代码语言:javascript
复制
pub fn _mps_args_set_key(args: [mps_arg_s, ..32u], i: ::libc::c_uint,
                         key: mps_key_t);

现在我试着这样称呼它:

代码语言:javascript
复制
_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):

代码语言:javascript
复制
pub static MPS_KEY_ARGS_END: mps_key_t = &_mps_key_ARGS_END;

关于我为什么使用mps_key_t的额外信息,用C语言表示:

代码语言:javascript
复制
typedef const struct mps_key_s *mps_key_t;

生锈的:

代码语言:javascript
复制
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)”处失败

EN

回答 1

Stack Overflow用户

发布于 2014-10-27 03:24:54

代码语言:javascript
复制
#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,您可以这样方便地使用:

代码语言:javascript
复制
static MPS_KEY_ARGS_END: *const mps_key_s = &_mps_key_ARGS_END;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26580694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档