Macro(宏)来源于希腊语,意思就是大,远.在计算机科学中指的是规则,这个规则指定了
输入和输出之间的关系(是不是优点类似于函数?).所有的宏都是一个概念,那就是输入
与输出之间的映射关系,这个和函数本质上是相同的.但是宏和函数处理方式基本上是不同
的,比如在C语言中,宏是在preprocess阶段被替换掉,而函数(讨论一般意义上的函数,不
讨论inline函数)在运行时调入栈中运行.而且不同的语言对宏的处理也是不同的,比如C
语言中,宏是无法区分作用域的(编译单元内的作用域),但是在metapost中,恰恰是可以
这样就定义了一个宏add,它的输入是foo,输出是foo+10,规则就是输入加上10.那么在
预处理阶段是如何处理的呢?比如,
输入和输出之间的关系(是不是优点类似于函数?).所有的宏都是一个概念,那就是输入
与输出之间的映射关系,这个和函数本质上是相同的.但是宏和函数处理方式基本上是不同
的,比如在C语言中,宏是在preprocess阶段被替换掉,而函数(讨论一般意义上的函数,不
讨论inline函数)在运行时调入栈中运行.而且不同的语言对宏的处理也是不同的,比如C
语言中,宏是无法区分作用域的(编译单元内的作用域),但是在metapost中,恰恰是可以
在宏体里定义局部变量的.参看wikipedia macros
下面讨论C语言中的宏.
谈到宏,不得不提到preprocess directives(预处理指令).预处理指令是预处理器在
预处理阶段所要执行的操作.具体在宏中就是执行宏替换功能.基本的一个就是#define.
好,现在先谈谈宏的定义.
宏就是处理输入和输出的规则.所以更直观的一点就是带个输入参数.
#define ADD(foo) foo+10
这样就定义了一个宏add,它的输入是foo,输出是foo+10,规则就是输入加上10.那么在
预处理阶段是如何处理的呢?比如,
bar.c
#define ADD(foo) foo+10
int main()
{