M四語言
m 四是一个通用的巨集處理器,由布萊恩 ・ 柯林漢和丹尼斯 ・ 里奇設計。m 四是因為 Ritchie 早前為 AP 交三小型機開發的 m 三巨集處理器擴充的。
使用
m 四是 POSIX 標準中的一部份,所有的版本的 UNIX 下攏會用得。雖然這種語言會當單獨使用,但大多數的人需要 m 四跤是干焦因為 GNU autoconf 中的「configure」指令碼依賴伊。
巨集處理器(抑是預處理器)一般用作文字替換工具。終其尾使用者定定會用伊來處理愛使用的文字模板,典型的是用編程工具,閣會用佇文字編輯佮文書處理工具。
歷史
巨集處理器開始流行的時,程式設計師閣攏咧使用組合語言來編程。佇咧以前,程式設計師發現𪜶的程式內底包含著足濟重複的代碼,所以𪜶創造了這種簡單的方法來重用。程式設計師傅誠緊發現講伊毋但會當用規塊代碼,閣會當為類似的參數替換無仝的值。這明確矣巨集處理器的使用範圍。
佇一九七七年,Kernighan 和 Ritchie 是因為 Christopher Strachey 的想法開發矣 m 四。一寡佮人無仝的特徵有:
- 自由形式的語法(毋是像遐的用於處理組合語言的典型巨集處理器仝款使用基於行的語法)
- 懸度的巨集擴充(巨集參數被擴充兩改:掃描的時陣一擺、插值的時陣一改)
自一開始,Rational Fortran ( RatFor ) 就使用 m 四作為伊的巨集 ia̋n-jín,大多數 UNIX 變種發布的時陣攏包含伊矣。 截止二空空九年,真濟應用猶是佇咧使用 m 四(做為 GNU autoconf 專案的一部份)。 伊閣出現佇咧 sendmail(一个廣泛使用的郵件傳輸代理)的組態過程,以及用於 gEDA 工具包中生成跤印。
m 四大多用佇代碼生成,佮其他巨集處理器仝款,若是出問題會誠難除毋著。
特性
m 四提供是下功能:
- 語法形式自由,毋是基於行的語法;
- 懸度的巨集擴充(巨集參數咧掃描和插值中攏會予人擴充)
- 文字替換
- 參數替換
- 檔案包括
- 字串操作
- 條件判斷
- 數算運算
- 系統介面
- 程式設計師診斷
- 獨立於電腦的語言
- 獨立於自然語言
- 有可程式化佮大部份早起先的巨集處理器無仝,m 四並無面向任何電腦語言抑是自然語言;毋過對歷史的角度來講,伊上頭仔是為支援 Fortran 的方言 Ratfor 開發的。此外,m 四猶是一種圖靈完備的程式語言。
範例
以下巨集代碼會當生成 HTML 代碼:自動為每一个章節編號。
` ` ` divert ( 影一 ) This ` divert'discards this text . Note that I had to quote the ` divert' in the comment so it wouldn't get undiverted .
- In a true comment , I'm free to use words such as divert and other builtin
- m 四 macros'names without consequence .
- This starts the count at ONE as the incr is a preincrement .
define ( ` H 二 _ COUNT', 零 )
- The H 二 _ COUNT macro is redefined every time the H 二 macro is used .
define ( ` H 二', ` define ( ` H 二 _ COUNT', incr ( H 二 _ COUNT ) ) < h 二 > H 二 _ COUNT . $ 一 < / h 二 >')
divert ( 零 ) dnl Diversion to 零 means back to normal . dnl macro removes this line . H 二 ( First Section ) H 二 ( Second Section ) H 二 ( Conclusion ) ` ` `
欲講代碼佇 m 四中執行,生以下結果:
` ` ` < h 二 > 一 . First Section < / h 二 > < h 二 > 二 . Second Section < / h 二 > < h 二 > 三 . Conclusion < / h 二 > ` ` `
dnl 用於刪除頭前的空行。
自由軟體版本
GNU 實現一个 m 四版本;FreeBSD、NetBSD 和 OpenBSD 嘛提供一个 m 四語言的獨立實現版本;此外,OpenSolaris 的 Heirloom 專案開發工具內底嘛包含一个 m 四語言的自由版本。