IT评测·应用市场-qidao123.com技术社区

标题: rust学习二十.14、RUST宏 [打印本页]

作者: 滴水恩情    时间: 2025-4-15 18:14
标题: rust学习二十.14、RUST宏
毫无疑问,宏是rust中极其重要的存在,只要我们看看一些标准库的代码。本文阐述rust宏相关的若干问题
 一、宏的定义和作用

先介绍下宏的劈头和历史,以便读者更能体会。
以下内容来自文心一言天生:
词源与早期寄义
盘算机领域的劈头与演变
基本没有什么毛病!
概括下:
1.macro(宏)-劈头于希腊,后拉丁借用,最后是英语用上了。
2.macro的核心意思就是:巨大,宏观(大规模现象之意)
3.在盘算机领域,大体保存了对macro的寄义,例如宏病毒,宏指令
具体到盘算机,可以如许理解:宏或者宏指令就是表达了一大段代码的对象(命令/指令等),表达了有许多代码的意思。
这是一个风俗问题。只要愿意,我们也可以称为:多指令集合,多代码集合。
 
以是,总结起来,rust宏定义:用于表示一段代码或者条件语句,其构成大概是一段代码,或则大概也没有任何代码。
或者说宏的核心作用就是两个
1.条件编译
2.表示一段代码,有助于简化编程
从这里可以看出rust宏和C++宏的作用极其相似!
二、宏实现原理

从其自用可以看出,其实现原理相当简单:
1.假如是条件编译指令,那么编译器发现后当做条件执行
2.假如表示一段代码,则rust编译器会把指令替换为一段代码(大体是提单,但具体上应该照旧有一些额外的内容)
宏都是在编译的时候起到作用!
三、宏和函数区别

书籍作者为什么要提到这个? 开始的时候我不太明白,直到我看了宏的代码。
宏的代码看起来有点像函数。
这里先总结下rust中宏和函数的区别:
1.宏可不仅仅是一段代码,还可以作为编译条件
2.宏可以接收不同个数参数(或者说不定个数参数),而函数不能
3.宏是在编译环节起作用(编译器会根据宏类型来决定作为编译条件照旧实现一段代码),而函数是在运行时起到作用
 
四、标准宏

4.1、常见标准宏

表_常见标准宏
[table][tr]宏名称功能描述所属模块/类型[/tr][tr][td]assert![/td][td]断言表达式为 true,否则触发 panic(常用于单元测试)[/td][td]标准库(测试相关)[/td][/tr][tr][td]assert_eq![/td][td]断言两个值相等,否则触发 panic[/td][td]标准库(测试相关)[/td][/tr][tr][td]assert_ne![/td][td]断言两个值不相等,否则触发 panic[/td][td]标准库(测试相关)[/td][/tr][tr][td]compile_error![/td][td]在编译期天生错误(用于自定义编译时检查)[/td][td]标准库(元编程)[/td][/tr][tr][td]concat![/td][td]连接多个字面量,返回 &'static str[/td][td]标准库(字符串操作)[/td][/tr][tr][td]column![/td][td]返回当前源代码的列号[/td][td]标准库(调试信息)[/td][/tr][tr][td]dbg![/td][td]输出表达式的值和类型(调试工具)[/td][td]标准库(调试相关)[/td][/tr][tr][td]eprint![/td][td]输出到标准错误流(不换行)[/td][td]标准库(I/O 操作)[/td][/tr][tr][td]eprintln![/td][td]输出到标准错误流(自动换行)[/td][td]标准库(I/O 操作)[/td][/tr][tr][td]env![/td][td]获取编译期情况变量(若变量不存在则报错)[/td][td]标准库(情况变量)[/td][/tr][tr][td]file![/td][td]返回当前源代码的文件名[/td][td]标准库(调试信息)[/td][/tr][tr][td]format![/td][td]格式化字符串并返回 String[/td][td]标准库(字符串操作)[/td][/tr][tr][td]include_bytes![/td][td]将文件读取为字节数组(&'static [u8])[/td][td]标准库(文件操作)[/td][/tr][tr][td]include_str![/td][td]将文件读取为字符串(&'static str)[/td][td]标准库(文件操作)[/td][/tr][tr][td]line![/td][td]返回当前源代码的行号[/td][td]标准库(调试信息)[/td][/tr][tr][td]macro_rules![/td][td]定义声明式宏(如 vec!)[/td][td]标准库(宏定义)[/td][/tr][tr][td]module_path![/td][td]返回当前模块的路径[/td][td]标准库(调试信息)[/td][/tr][tr][td]option_env![/td][td]安全获取编译期情况变量(返回 Option




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4