- 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
- 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
- 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
目 录 前言 (一 ) (二 ) (三 ) (四 ) 终结篇 本文档使用 看云 构建 - 2 - 前言 前言 原文出处 :http///a/1190000004104696 作者 :garfileo 事实上 ,这个世界并没有几份 GNU m4 教程。 这个文档系列是我第一次认真学习 GNU m4 并进行了一些实践之后的一些总结。由于我在撰写此文的 过程中充满着像 m4 展开一个又一个宏一般的耐心 ,因此这篇文章会比较长。在这个信息碎片化的时 代 ,似乎没有很多人愿意去看很长的文章 ,大家更喜欢干货。为了节省大家的时间 ,必须声明 ,这个 文档系列没有干货 ,它是写给我自己或者那些像我自己的人看的。 本文档使用 看云 构建 - 3 - (一 ) (一 ) 什么是宏 书名是 『宏』 ,它被作者展开为这本书的全部内容。药瓶上的标签是 『宏』 ,将药片从瓶中倾倒出来 ,就 是这个宏的展开结果。被用的最多的 『宏』 ,应该是 Internet 的超级链接。每当你点击一个超级链接 ,就 相当于将这个宏展开为网页中的内容。生活中 ,类似的例子还有很多 ,只要你给某种具体的事物贴上了一 个标签 ,那么这个标签就相当于宏。 人类非常喜欢给事物贴标签 ,尽管无论他们贴与不贴 ,那些事物本身依然是存在的。在编程中 ,如果你想 给一段代码贴标签 ,最简单最直接的办法就是使用宏。那些还在用汇编语言编程的人 ,他们是离不开宏 的 ,因为汇编语言本身就是将一大堆标签贴在了更大的一堆机器代码上。如果所用的编程语言不提供宏功 能 ,可以用这种编程语言为一段代码制作一个标签——函数 ,不过这种标签就不是宏了 ,而且要付出一些 性能上的代价 ,因为标签的展开过程被推迟到程序的运行过程。 C 语言自诞生后 ,只用了 5 年就让汇编语言归隐山林了 ,这可能要归功于 Unix 的成功以及 Dennis Ritchie 的忽悠。Steve Johnson——yacc, lint, spell 以及 PCC (Portable C Compiler )的作者说 : 『Dennis Ritchie 告诉所有人 ,C 函数的调用开销真的很小很小。于是人人都开始编写小函数 ,搞模块 化。然而几年后 ,我们发现在 PDF-11 中函数的调用开销依然非常大 ,而 VAX 机器上的代码往往在 CALL 指令上花费掉 50% 的运行时间。Dennis 对我们撒了谎 !但为时已晚 ,我们已经欲罢不能……』 现代的编程语言 ,几乎都赞同用函数来取代宏。拥护者们往往会给出一些冠冕堂皇的理由是 ,诸如不必额 外实现一个宏处理器 ,函数比宏更安全并且更容易调试。事实上 ,他们的理由仅仅是迎合现实而已。如果 将这些人扔进时空裂缝让他们穿越到 Ken Thompson 编写 Unix 系统的时代 ,让他们也在一台废弃的 PDP-7 型号的计算机上写程序。在这种内存只有 8KB 的计算机上 ,那些冠冕堂皇的理由近乎与科幻小说 等价。函数之所以能够取代宏 ,仅仅是因为 CPU 的计算速度比过去更快了 ,内存比以前更大了 ,牺牲一 些程序性能 ,让编程工作更容易一些 ,这样比较合算而已。编程语言的性能与机器的性能似乎总是成反比 的。 宏被很多人主观的弃用了 ,得益于现代编程语言的表达能力 ,他们似乎几乎不需要用宏 ,于是他们作出结 论 :宏过时了。事实上 ,宏会永远居于众编程语言之上的 ,因为前者总是能够生成后者。编程专家总是会 告诉我们 ,要慎用宏。胆子小的程序猿看到宏就躲得远远的 ,以至于他们总觉得那些使用宏的代码是糟糕 的 ,是不安全的。事实上 ,在编程中 ,若能恰如其分的使用宏 ,可以让代码更加简洁易读 ,特别是对 C 语 言这种表现力不足的语言。 例如下面 C 代码中的宏 : #define DEF_PAIR_OF(dtype) \ typedef struct pair_of_##dtype { \ dtype first; \ dtype second; \ } pair_of_##dtype##_t 本文档使用 看云 构建
有哪些信誉好的足球投注网站
文档评论(0)