
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/(美式)。
IsraelChristianityquackendueacedbobbedbulkiestColoradoDADSgrantinggrasshookimputedstarsacetic acid fermentationbrokerage firmconflict of interestdepart fromefficient market hypothesishistoric monumentoff the pegphonetic systemwear two hatsclausthaliteclerklydereelerdiplostemonousdistalishypopleuraichthyophobiarenaturation