【linux】M4介绍

9 篇文章 0 订阅
M4 (编程语言)
维基百科,自由的百科全书
跳转至: 导航 搜索

m4是一个通用的宏处理器,由布莱恩·柯林汉丹尼斯·里奇设计。m4 是基于 Ritchie 早先为 AP-3 小型机开发的m3宏处理器扩展的。

目录

[隐藏]

[编辑] 使用

m4 是 POSIX 标准中的一部分,所有版本的 UNIX 下都可用。虽然这种语言可以单独使用,但大多数人需要 m4 仅仅是因为 GNU autoconf 中的 “configure” 脚本依赖它。

宏处理器(或预处理器)一般用作文本替换工具。最终用户经常会用它来处理要反复使用的文本模板,典型的是用于编程工具,还会用于文本编辑和文字处理工具。

[编辑] 历史

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

在 1977 年,Kernighan 和 Ritchie 基于 Christopher Strachey 的想法开发了 m4。一些与众不同的特征有:

  • 自由形式的语法(而不是像那些用于处理汇编语言的典型宏处理器一样使用基于行的语法)
  • 高度的宏扩展(宏参数被扩展两次:扫描时一次、插值时一次)

从一开始,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 中执行,生成以下结果:

<h2>1. First Section</h2>
<h2>2. Second Section</h2>
<h2>3. Conclusion</h2>

dnl 用于删除前面的空行。

[编辑] 自由软件版本

GNU实现了一个 m4 版本;FreeBSD、NetBSD 和 OpenBSD 也提供一个 m4 语言的独立实现版本;此外,OpenSolaris的Heirloom 项目开发工具中也包含了一个 m4 语言的自由版本。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值