Rust面试题更新 2026-08-03

在 Rust 中,宏与函数在定义、调用方式、参数处理及代码生成时机上有哪些本质差异?请列举 Rust 中常用的宏类型,并说明它们各自的应用场景。

考察说明

考查对 Rust 宏与函数核心区别及常见宏类型的理解。

回答思路

  1. 【回答框架 1】宏在编译期展开,生成代码;函数在运行时调用,执行已有代码。宏可接收语法片段,函数接收类型化参数。
  2. 【回答框架 2】宏定义使用 macro_rules! 或过程宏,函数使用 fn 关键字。宏调用带感叹号,函数调用不带。
  3. 【回答框架 3】常见宏包括 println!、vec!、format! 等声明式宏,以及 derive、attribute 等过程宏。
  4. 【回答框架 4】宏用于元编程、代码复用、DSL 构建;函数用于逻辑封装和模块化。
  5. 【回答框架 5】宏可能增加编译时间和代码体积,函数无此开销。
  6. 【关键点 1】宏在编译期展开,函数在运行时执行。
  7. 【关键点 2】宏可操作语法树,函数仅处理类型化参数。
  8. 【关键点 3】常见宏有 println!、vec!、format!、derive 等。
  9. 【关键点 4】宏用于元编程,函数用于逻辑复用。
  10. 【关键点 5】宏增加编译时间,函数无编译期开销。
  11. 【易错点 1】混淆宏与函数的调用语法,宏需加感叹号。
  12. 【易错点 2】误以为宏可以像函数一样传递或返回。
  13. 【易错点 3】忽略宏展开可能导致的代码膨胀和编译时间增加。