计算机程序设计c语言第09章预处理命令
- 格式:ppt
- 大小:162.00 KB
- 文档页数:21
第9章预处理命令宏定义不是c语句,所以不能在行尾加分号。
如果加了分号则会连分号一起进行置换。
可以用#undef命令终止宏定义的作用域。
对程序中用""括起来的内容(即字符串内的字符),即使与宏名相同,也不进行置换。
宏定义只做字符替换,不分配内存空间。
宏名不是变量,不分配存储空间,也不能对其进行赋值。
在宏展开时,预处理程序仅对宏名作简单的字符串替换,不作任何检查。
在进行宏定义时,可以引用已定义的宏名无参宏定义的一般格式:#define 标识符字符串将这个标识符(名字)称为“宏名”,在用预编译时将宏名替换成字符串的过程称为"宏展开"。
#define是宏定义命令。
带参宏定义的一般格式:#define 宏名(形参表)字符串带参宏的调用和宏展开:调用格式:宏名(实参表);宏展开(又称为宏替换)的方法:用宏调用提供的实参直接置换宏定义中相应的形参,非形参字符保持不变。
定义有参宏时,宏名与左圆括号之间不能留有空格。
否则,C编译系统会将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。
有参宏的展开只是将实参作为字符串,简单地置换形参字符串而不做任何语法检查。
为了避免出错,可以在所有形参外,甚至整个字符串外,均加上一对圆括号。
如:#define S(r) 3.14*(r)*(r)则:areapS(a^b); 展开后为:area^ 3.14*(a^ b)*(cH- b);调用有参函数时,是先求出实参的值,然后再复制一份给形参。
而展开有参宏时,只是将实参简单地置换形参。
函数调用是在程序运行时处理的,为形参分配临时的内存单元;而宏展开则是在编译前进行的,在展开时不分配内存单元,不进行值的传递,也没有’返回值"的概念。
调用函数只可得到一个返回值,而用宏可以设法得到几个结果。
在有参函数中,形参都是有类型的,所以要求实参的类型与其一致;而在有参宏中,形参和宏名都没有类型,只是一个简单的符号代表,因此,宏定义时,字符串可以是任何类型的数据。