如何使用vec! #![no_std]库中的宏?

时间:2018-07-25 10:34:45

标签: rust

在标准Rust代码中,vec!宏位于前奏中,无需手动使其可见。我正在使用一个不使用标准库并设置#![no_std]的库,因此前奏也不可见。

在测试代码中,我 am 使用标准库中的功能,因此我有一个

#[cfg(test)]
extern crate std;

这可以正常访问标准库中的函数和数据类型,但是现在我想访问vec!(...)宏,但我不知道如何。

use std::vec::vec!;导致错误:

expected one of `::`, `;`, or `as` here 

在感叹号的位置。

我该如何访问此宏?

2 个答案:

答案 0 :(得分:4)

vec!是宏,因此您必须添加#[macro_use]

#[cfg(test)]
#[macro_use]
extern crate std;

如果您使用夜间编译器,还可以使用 use_extern_macros 功能:

#![feature(use_extern_macros)]

#[cfg(test)]
extern crate std;

#[cfg(test)]
mod test {
    use std::vec;
}

答案 1 :(得分:4)

除了Tims answer,如果您有嵌入式系统并且有分配器,但没有std,则可以使用

#[macro_use]
extern crate alloc;

能够使用vec!