雖然 C 的 preprocessor 也被稱為 macro,但跟 LISP、Elixir、Julia 比起來就差很多的原因是
- C 對語法的原始位置放棄追蹤
- C 對 macro 的輸入跟輸出都沒有基本的檢查,也沒辦法對不同輸入做出反應
而常見的 LISP macro 過程則是:
- reader:
TEXT -> S-expression
- 使用者定義的 macro:
S-expression -> S-expression
- expander:
S-expression -> LISP
雖然 C 的 preprocessor 也被稱為 macro,但跟 LISP、Elixir、Julia 比起來就差很多的原因是
而常見的 LISP macro 過程則是:
TEXT -> S-expression
S-expression -> S-expression
S-expression -> LISP