全心思齐网

什么是M4?

m4 是一个通用的宏处理器,由 Brian Kernighan 和 Dennis Ritchie 设计。m4 是基于 Ritchie 早先为 AP-3 小型机开发的 m3 宏处理器扩展的。

中文名

m4处理器

外文名

m4cpu

使用发展历史特性示例自由软件版本参考资料

使用

m4 是 POSIX 标准中的一部分,所有版本的 UNIX 下都可用。虽然这种语言可以单独使用,但大多数人需要 m4 仅仅是因为 GNU autoconf 中的 “configure” 脚本依赖它。宏处理器(或预处理器)一般用作文本替换工具。最终用户经常会用它来处理要反复使用的文本模板,典型的是用于编程工具,还会用于文本编辑和文字处理工具。[1]

发展历史

宏处理器开始流行的时候,程序员还都在使用汇编语言来编程。在早期,程序员发现他们的程序中包含了很多重复的代码,于是他们创造了这种简单的方法来重用。程序员们很快发现它不仅能用于重用整块代码,还能为类似的参数替换不同的值。这明确了宏处理器的使用范围。在 1977 年,Kernighan 和 Ritchie 基于 Christopher Strachey 的想法开发了 m4。一些与众不同的特征有:

1. 自由形式的语法(而不是像那些用于处理汇编语言的典型宏处理器一样使用基于行的语法)

2. 高度的宏扩展(宏参数被扩展两次:扫描时一次、插值时一次)

从一开始,Rational Fortran(RatFor) 就使用 m4 作为它的宏引擎,而大多数 UNIX 变种发布时都包含了它。截止 2009 年,许多应用仍在使用 m4(作为 GNU autoconf 项目的一部分)。它还出现在 sendmail(一个广泛使用的邮件传输代理)的配置过程,以及用于 gEDA 工具包中生成脚印。m4 大多用于代码生成,和其他宏处理器一样,一旦出了问题会很难调试。

特性

m4 提供如下功能:

* 语法形式自由,而不是基于行的语法;

* 高度的宏扩展(宏参数在扫描和插值中都会被扩展)

* 文本替换

* 参数替换

* 文件包含

* 字符串操作

* 条件判断

* 数算运算

* 系统接口

* 程序员诊断

* 独立于计算机编程语言

* 独立于自然语言

* 可编程

与大部分早先的宏处理器不同,m4 并不面向任何计算机语言或自然语言;但从历史角度来说,它最初是为支持 Fortran 的方言 Ratfor 而开发的。此外,m4 还是一种图灵完备的编程语言。

示例

以下宏代码可生成 HTML 代码:自动为每个章节编号。

divert(-1)

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

# m4 macros' names without consequence.

# This starts the count at ONE as the incr is a preincrement.

define(`H2_COUNT',0)

# The H2_COUNT macro is redefined every time the H2 macro is used.

define(`H2',

`define(`H2_COUNT',incr(H2_COUNT))<h2>H2_COUNT. $1</h2>')

divert(0)dnl Diversion to 0 means back to normal. dnl macro removes this line.

H2(First Section)

H2(Second Section)

H2(Conclusion)

上述代码在 m4 中执行,生成以下结果:

编辑

传视频

纠错

目录

匿名回答于2024-06-01 17:52:35


相关知识问答