一、编译预处理:
1.宏定义: 以 #define 开始,分为带参数和不带参数两种。
不带参数的宏定义: #define PI 3.14
宏替换只是宏名誉字符串之间的简单替换,不做其他任何数据类型和合法性检查,也不分配内存空间。
带参数的宏定义: #define MUL(x , y) (x)*(y)
注意:写带参数宏定义时,宏名与左括号之间不能出现空格,否则空格右边的字符都回作为替代字符串的一部分。
#define ADD (x,y) x+y //会认为把ADD宏替换成 (x,y) x+y
带参数的宏与函数的区别:
- 函数调用在程序运行时处理,在栈中分配内存单元。宏带环则是在编译前进行的,在替换时并不分配内存单元,不进行值传递,没有返回值得概念。
- 函数调用时,先计算出实参表达式的值,然后赋值给形参。而宏只是进行简单的替换,不做任何计算。
- 函数中的形式参数和实际参数都要有类型,且两者要一致,如果不一致,系统将自动进行类型转换。而宏不存在类型问题。
- 宏替换只占用编译时间,因为实在编译前完成的,而函数调用要占用运行时间。
#define #undef(undef提前终止宏定义的作用域)。
2.文件包含: #include <文件名>或 #include "文件名"
3.条件编译:只编译原程序中满足条件的程序段。1.使生成的目标程序短小,减少程序运行时内存。2.方便调试。
- 根据宏名是否已经定义来确定是否编译某些程序段
- //暂时跳过去
时间: 2024-10-18 06:22:11