
n. 宏指令扩展
宏展开(Macroexpansion) 是编程语言(尤其是Lisp家族语言如Common Lisp、Scheme,以及现代语言如Rust)中编译器或解释器处理宏(Macro) 的核心过程。它指在编译或求值阶段,将代码中的宏调用替换为宏定义所生成的实际代码的操作。这一过程发生在程序执行前,属于元编程的重要机制。
宏的本质
宏是一种特殊的代码模板,允许开发者自定义语法或简化重复模式。与函数不同,宏在编译时而非运行时展开,直接操作代码结构(AST)。例如,Common Lisp中的defmacro
允许定义宏,编译器在遇到宏调用时会执行宏展开。
展开过程
当编译器识别到宏调用(如(my-macro arg1 arg2)
),会执行以下步骤:
若新代码中仍包含宏,则递归展开直至生成基础代码(如函数调用、变量赋值)。
与函数调用的区别
特性 | 宏(Macro) | 函数(Function) |
---|---|---|
执行时机 | 编译时展开 | 运行时调用 |
参数处理 | 接收未求值的表达式 | 接收已求值的参数 |
返回值 | 生成待执行的代码 | 返回计算结果 |
示例:Rust的vec!
宏展开为数组初始化代码(来源:Rust文档 - Macros)。
syntax-rules
)。详解宏设计模式与展开机制(第9章)。
使用Scheme解释宏与元语言抽象(第4章)。
Macros in Rust 说明声明宏与过程宏的展开原理。
宏展开通过编译时代码转换,显著提升语言表达力与灵活性,是高级语言实现元编程的核心工具。
"Macroexpansion"是计算机编程领域的专业术语,具体含义如下:
定义
指宏(macro)在预处理器中的展开过程,即用宏定义的实际代码替换代码中的宏名称。例如在C语言中,#define SQUARE(x) x*x
定义后,代码中的SQUARE(5)
会被替换为5*5
。
展开过程特点
该术语在中文常译为宏扩展或宏指令扩展(),其词源由"macro-"(宏观)和"expansion"(扩展)构成,字面意为"宏观层面的代码展开"。发音为/meɪkrəʊɪks'pænʃn/(英式)或/meɪkroʊɪks'pænʃn/(美式)。
limbsensationalundulatestand in lineimportuneconspireddisappointinglyduckerlichOlympiadpoornessroundstorch planarthroxerosisbarkometercandescentchampacdemustardizationevenerextrapericardialgreenockitehemacytometerhemsleyadinhepincapacitateintermarrymedalistmesaticephalismallelicvolumetric strain