gpt4 book ai didi

Rust 常量/静态可以暴露给 C 吗?

转载 作者:太空狗 更新时间:2023-10-29 16:44:36 25 4
gpt4 key购买 nike

假设我有一个包含常量或静态的 Rust API,例如 i32。我想在 C 中使用这个 Rust API。在 C 方面,我想将该常量用作数组大小。我是正确的,没有办法做到这一点吗?在为 Rust API 的其余部分提供声明的 C 头文件中重新声明常量的最佳解决方案是什么?

更新:更具体地说,我使用的编译器不支持可变长度数组 (Visual C++ 2005)

最佳答案

你肯定可以做到,至少在函数内部:

cnst.rs:

#[no_mangle]
pub static X: i32 = 42;

cnstuse.c:

#include <stdint.h>
#include <stdio.h>

extern const int32_t X;

int main() {
char data[X];
printf("%lu\n", sizeof(data));
return 0;
}

编译:

% rustc --crate-type=staticlib cnst.rs
note: link against the following native artifacts when linking against this static library
note: the order and any duplication can be significant on some platforms, and so may need to be preserved
note: library: System
note: library: pthread
note: library: c
note: library: m
% gcc -o cnstuse cnstuse.c libcnst.a
% ./cnstuse
42

但是,顶级数组声明不能使用全局变量/常量来确定大小,因此这只能在函数内部起作用。

关于Rust 常量/静态可以暴露给 C 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31701655/

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