由于编译一个C程序是需要许多步骤的,其中第一个步骤就是
预处理阶段。预处理阶段主要是用于删除备注,插入由头文件包含的文件内容,还有定义和替换被#define指令定义的符号以及确定代码的部分内容。
这篇博文说的就是有#define指令定义的内存,我们叫它宏定义。使用#define指令,你可以把任何文本替换到程序中。它还有一个机制就是能把参数替换到文本里面。
#define 名字(name)(参数列表) stuff
#define MUL(x) ((x) * (x))
#define ADD(x) ((x) + (x))
这个就是要定义一个参数列表的宏,比如说定义一个乘法的宏: #define MUL(x) ((x) * (x)) 这个宏就是定义了一个乘法。为什么里面的参数都需要括号来括起来,是因为防止出现没有按照你自已预想的次序进行求值的情况发生。比如在MUL(5)的情况下,就容易发生错误,里面的括号不加,就会造成(5 + 1 * 5 + 1) = 11, 没有得出预想的36。所以里面的括号是要添加的。#define ADD(x) ((x) + (x)) 外面的括号就是如果出现了 cnt = 20 * ADD(5); 可能出现的情形就是 20 * 5 + 5 = 105,而不是200所以外面的括号是需要加的。总之就是有参数就要在每个参数上面添加括号,还有在最外边用一个括号包围他们。
关于宏定义和函数的问题
在一些简单的计算中,我们可以多用用宏定义。但在执行一些比较复杂的计算的时候就需要函数了。因为复杂的计算需要的宏定义式子比较长,而且不好定义。函数就比较容易写出来。宏定义每次在执行的时候都被插入到程序中,对于多次被调用的算还是选择函数好。但宏定义的执行速度更快,而函数需要一些输入与输出的额外开支。宏定义在用参数的时候是不需要参数的类型的,而函数就需要参数的类型。
#define name stuff
#define MAX_QUE 50
这个就是直接定义一个替换文本:比如说 #define MAX_QUE(最大的队列数) 50 这个就是利用宏定义来定义一个字符串替换数字。在一个c程序中反复的用到这个50,你就可以用这个宏定义来代替,比如需要修改50,你只需要造宏定义修改就行了,没必要在每个定义了50的地方一个个修改。这篇博文说的就是有#define指令定义的内存,我们叫它宏定义。使用#define指令,你可以把任何文本替换到程序中。它还有一个机制就是能把参数替换到文本里面。
#define 名字(name)(参数列表) stuff
#define MUL(x) ((x) * (x))
#define ADD(x) ((x) + (x))
这个就是要定义一个参数列表的宏,比如说定义一个乘法的宏: #define MUL(x) ((x) * (x)) 这个宏就是定义了一个乘法。为什么里面的参数都需要括号来括起来,是因为防止出现没有按照你自已预想的次序进行求值的情况发生。比如在MUL(5)的情况下,就容易发生错误,里面的括号不加,就会造成(5 + 1 * 5 + 1) = 11, 没有得出预想的36。所以里面的括号是要添加的。#define ADD(x) ((x) + (x)) 外面的括号就是如果出现了 cnt = 20 * ADD(5); 可能出现的情形就是 20 * 5 + 5 = 105,而不是200所以外面的括号是需要加的。总之就是有参数就要在每个参数上面添加括号,还有在最外边用一个括号包围他们。
关于宏定义和函数的问题
在一些简单的计算中,我们可以多用用宏定义。但在执行一些比较复杂的计算的时候就需要函数了。因为复杂的计算需要的宏定义式子比较长,而且不好定义。函数就比较容易写出来。宏定义每次在执行的时候都被插入到程序中,对于多次被调用的算还是选择函数好。但宏定义的执行速度更快,而函数需要一些输入与输出的额外开支。宏定义在用参数的时候是不需要参数的类型的,而函数就需要参数的类型。