宏处理器和预处理器有什么区别?
宏处理器
许多汇编语言支持“宏”功能,在此宏语句在被翻译成机器程序之前将被翻译成一系列汇编语言语句和可能的其他宏语句。因此,宏工具是一种文本替换能力。
它可以说明宏的效用,考虑这样一种情况,其中一台机器没有单个机器或汇编语言语句将一个内存地址的内容添加到另一个内存地址作为假设的汇编指令ADDX,Y。相反,假设机器有一条指令LOAD,将数据从内存移动到寄存器,一条指令ADD,将内存地址的内容添加到寄存器的内容,以及一条指令STORE,将数据从寄存器移动到内存。
通过使用这些指令,它可以使用宏定义创建“双地址添加”指令,如下所示-
MACRO ADD2 X, Y LOAD Y ADD X STORE Y ENDMACRO
第一条语句将宏命名为ADD2并定义其伪参数,即形式参数X和Y。
接下来的三个语句定义了宏,即它们给出了它的翻译。可以假设机器只有一个寄存器,所以没有问题LOAD和STORE指的是什么寄存器。它可以将ADD2用作普通的汇编语言操作代码。
预处理器
预处理器是在源程序通过编译器之前对其进行处理的程序。它在所谓的预处理器命令行或指令的控制下运行。预处理器指令位于主线之前的源代码中。预处理器向编译器提供输入。它可以执行以下功能,如下所示-
宏处理-预处理器可以使用户能够定义更高级构造的速记宏。
文件包含-预处理器可以将头文件包含到程序LEX中。例如,C预处理器在处理包含此语句的文件时,会生成文件<global.h>的内容以恢复语句#include<global.h>。
RationalPre-Processors-这些处理器通过额外的当前控制流和数据结构设施增强了早期的语言。例如,这样的预处理器可以为用户提供内置宏,用于诸如while语句或if语句之类的结构,而编程语言本身不存在这些结构。
语言扩展-这些处理器尝试将功能插入语言中。例如SQL语言是一种安装在C中的数据库查询语言。#开头的语句被预处理器视为数据库访问语句,独立于C,并在实现数据库访问的例程中转换为过程调用。