Rust 属性语法

文章目录

1.简介

Rust 中的属性(Attribute)是一种元数据注解,用于向编译器或工具传递额外信息

它们以 #[]#![] 开头,可以附加在 crate、模块、函数、结构体、枚举等代码元素上。它们不会影响代码的业务逻辑,而是指导编译器如何编译、进行何种检查,或为代码生成特定的实现。

2.属性语法要点

语法形式 示例 含义
#[attribute] #[derive(Debug)] 属性应用于它下面紧邻的元素(函数、结构体等)。
#![attribute] #![deny(warnings)] 属性应用于包含它的整个容器(如整个 crate 或模块)。

区分技巧 :有感叹号 ! 的是内部属性 ,作用于整个容器;没有 ! 的是外部属性,作用于紧邻的代码元素。

3.常见属性类型

属性类型 作用 使用场景
派生属性 #[derive(...)] 为结构体或枚举自动生成常用 trait 的实现(如 DebugCloneCopy 等)。 节省大量样板代码,快速获得调试、克隆等功能。
条件编译属性 #[cfg(...)] 根据特定条件(如操作系统、架构)决定是否包含某段代码。 编写跨平台代码时,为不同系统提供特定实现。
Crate 级属性 #![] 应用于整个 crate(通常放在 lib.rsmain.rs 的顶部)。 设置 crate 类型、禁止警告、开启全局 #![deny(warnings)] 等。
测试属性 #[test] 将函数标记为单元测试。 编写测试用例,执行 cargo test 时会自动运行。
特性标记 #[must_use] 当返回值未被使用时触发编译警告。 强调函数返回的结果不应被忽略(如 Result 类型)。
工具属性 #[allow(...)] / #[deny(...)] 调整 lint 警告级别,忽略或强制通过某些代码检查。 控制编译器警告,保持代码质量。
外部函数接口 #[repr(C)] 强制 Rust 类型的内存布局与 C 语言兼容。 与 C 语言交互、操作系统编程或嵌入式开发时。

4.使用示例

下面通过几个典型的示例帮助你快速理解:

rust 复制代码
// 1. 派生属性:自动实现 Debug trait,让结构体可以方便打印
#[derive(Debug)]
struct User {
    name: String,
    age: u8,
}

// 2. 条件编译属性:只在 Linux 系统上包含这段代码
#[cfg(target_os = "linux")]
fn get_os_name() -> &'static str {
    "Linux"
}

// 3. Crate 级属性:禁止所有警告(通常放在文件最顶部)
#![deny(warnings)]

// 4. 测试属性:单元测试
#[test]
fn test_addition() {
    assert_eq!(2 + 2, 4);
}

// 5. 特性标记:提醒调用者必须处理 Result
#[must_use = "这个函数返回一个必须处理的 Result"]
fn dangerous_operation() -> Result<(), &'static str> {
    Err("出错了!")
}

// 6. 工具属性:忽略"未使用变量"警告
#[allow(unused_variables)]
fn ignore_me(x: i32) {
    // 没有使用参数 x,但编译器不会报警
}

5.总结

Rust 属性 #[] 是给编译器和工具的"指令",用于自动生成代码、控制编译条件、管理警告等。

有外属性 #[](作用于下方元素)和内属性 #![](作用于整个容器)两种形式。


参考文献

Rust 程序设计语言中文版

相关推荐
月诸清酒20 小时前
AI 加剧了 Rust 替换前端基建的脚步:AI 时代,开发语言何去何从
开发语言·人工智能·rust
l1t2 天前
DeepSeek总结的将 Rust Delta Kernel 集成到 ClickHouse
数据库·clickhouse·rust
techdashen2 天前
在 Rust 异步接口的丛林中生存:从同步 I/O 到手写异步状态机
开发语言·后端·rust
guyoung2 天前
BoxAgnts介绍(1)——开箱即用(Out-Of-The-Box)
rust·agent·ai编程
斐夷所非2 天前
从 Oxidizr 到 Oxidizer | Rust 在系统与逆向工程的应用
rust
星栈独行2 天前
别让 API 跳去登录页:我在 Axum 里做了认证失败双通道
前端·后端·rust·开源·github·个人开发
古城小栈2 天前
Rust 调用 C 语言库 实战指南(企业级)
c语言·开发语言·rust
刘布斯yy3 天前
新写了个直播录制工具,可录制抖音快手斗鱼直播
rust·音视频·直播录制
恋喵大鲤鱼3 天前
Rust 中的字符串 slice 是什么?
rust