宏处理器

2024 年 11 月 15 日 | 阅读时间:4 分钟

理解宏处理器

宏处理器是一种在编程中起关键作用的系统软件。它代表了源代码编程语言中一组常用的语句。宏处理器将每个宏指令替换为相应的源代码语句组。此操作称为宏的展开。

使用宏指令,程序员可以将机械细节留给宏处理器处理。这使得编写代码更加方便,因为它允许定义可以用现有语言组件表示的新语言结构。

Macro Processor

宏处理器的工作涉及几个步骤

1. 宏定义

宏定义是程序员编写(定义)一次的代码段。宏由 #define 指令定义。宏定义中的每个参数都以字符 & 开头。可以使用形式参数编写宏定义。以下是 C/C++ 中宏定义的示例


Macro Processor

在此示例中,宏 SQUARE 被定义为计算给定值的平方。形式参数 x 在宏定义中使用。当使用 SQUARE(num) 调用宏时,它会在预处理过程中被替换为 ((num) * (num))。因此,主函数中的 printf 语句实际上变为 printf("Square of %d is %d\n", num, ((num) * (num)));.

2. 宏调用

宏调用是在调用或调用宏时进行的。宏调用给出了被调用的宏指令的名称,并指定了用于展开宏的参数。以下是 C/C++ 中宏调用的示例


Macro Processor

在此示例中,宏 ADD_TWO_NUMBERS 在 int sum = ADD_TWO_NUMBERS(a, b); 这一行被调用。在预处理过程中,此行被替换为 int sum = ((a) (b));。宏采用参数 x 和 y 并计算它们的总和。结果代码等同于直接编写 int sum = a b; ,但宏提供了一种总结和重用操作的方法。

总之,宏定义是定义宏是什么及其代表什么的地方,而宏调用是您在代码中使用或调用宏的地方。

3. 宏展开

这是宏处理器将每个宏指令替换为相应的源代码语句组的过程。此操作称为宏的展开。使用宏指令,程序员可以将机械细节留给宏处理器处理。

宏展开可以使用两种语言处理器执行

  1. 宏汇编器: 它将程序中的每个宏调用展开为一系列汇编语言语句,并汇编生成的结果汇编语言程序。
  2. 宏预处理器: 它仅处理宏调用。其他语句在汇编器的帮助下处理。宏预处理器仅执行程序中宏的展开。
Macro Processor

宏处理器的显著特点

宏处理器具有几个显著特点

  • 宏代表源代码编程语言中一组常用的语句。
  • 宏处理器设计与运行它的计算机架构没有直接关系。
  • 宏处理器涉及定义、调用和展开。

通用宏处理器

一种流行的通用宏处理器或首选的动力预处理器是一种宏处理器,它不会与特定语言或软件绑定或集成。宏处理器是一个将文本流从一个地方复制到另一个地方的应用程序,并在这样做时进行系统的一组替换。宏处理器通常嵌入到其他程序中,例如汇编器和编译器。

宏处理器的示例

宏处理器有几个示例

  • GPM (通用宏生成器): 1960 年代中期在英国剑桥大学开发的早期宏处理器之一。
  • ML/I (宏语言一): 作为剑桥研究生的博士研究的一部分开发的,Peter J. Brown。
  • STAGE2: William Waite 移动编程系统的一部分。
  • M6: 早期在 AT&T 贝尔实验室开发的宏处理器。
  • SNOBOL: 一种能够完成大部分预处理的字符串处理语言,宏处理器可以做到这一点。
  • XPOP: Mark Halpern 于 1960 年代在 IBM 提出的另一种通用宏处理语言尝试。
  • TTM: 一种递归的、解释性的语言,主要用于字符串操作、文本编辑、宏定义和展开。
  • GMP (通用宏处理器): 由 M Boule 于 1970 年代中期在 CII 公司的 DLB/GC 部门开发。

结论

最后,宏处理器在编程中是必不可少的,它提供了一种科学的方法来处理供应编程语言中通常使用的语句。它们为程序员提供了一种方便的方法来定义新的语言结构,并将机械信息留给宏处理器管理。无论您是专业程序员还是新手,掌握和利用宏处理器都可以显着提高您的编码效率和有效性。