第0章预处理教学提纲.pptVIP

  • 0
  • 0
  • 约1.81千字
  • 约 28页
  • 2019-12-01 发布于天津
  • 举报
;;; 基本概念;9.1 宏定义; 9.1 宏定义; 8.1 宏定义; 8.1 宏定义;(4)宏名如果在源程序中若用引号括起来,则预处理程序不对其作宏替换。P206例9.2中的L;(6)习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。 (7)可用宏定义表示数据类型,使书写方便。 例如: #define INT int 在程序中可用INT作变量说明: INT a[10], body[5]; (8)如果对输出格式进行宏定义,可以减少程序中重复书写某些字符串的工作量,而对程序结果没有影响。使用宏定义,还可以提高程序的通用性。;例: 对输出格式进行宏定义。 #define PR printf #define D %d #define F %f\n #include stdio.h void main() { int a=012, c=-8, e=11; float b=3.8, d=9.7, f=21.08; PR(D F,a,b); PR(D F,c,d); PR(D F,e,f);};例如: #define N(x,y) 3*x+y*y /*带参的宏定义*/ k=N(7,9); /*经预处理宏展开后的语句为:k= 3*7+9*9;*/;例: 带参的宏定义示例。 #include stdio.h #define MAX(a,b) (ab)?a:b void main() { int x,y,max; printf(input two numbers:); scanf(%d%d,x,y); max=MAX(x,y); printf(max=%d\n,max);};2. 使用带参宏定义的几点说明 对于带参的宏定义有以下问题需要说明: (1)带参宏定义中,宏名和形参表之间不能有空格出现。 例如: #define MAX(a,b) (ab)?a:b 写为:#define MAX (a,b) (ab)?a:b;例: 带参的宏定义中形参和实参的替换。 #include stdio.h #define S1(y) (y)*(y) void main() { int a,sq; printf(input a number: ); scanf(%d,a); sq=S1(a+1); printf(sq=%d\n,sq); } ; 8.1 宏定义;;3. 带参宏定义与函数的区别 (1) 函数调用时,先求出实参表达式的值,然后代入形参。而使用带参的宏只是进行简单的字符替换。 (2) 函数调用是在程序运行时处理的,为形参分配临时的内存单元。而宏展开则是在编译前进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。 (3) 对函数中的实参和形参类型要求一致。而宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任何类型的数据。 (4) 调用函数只可得???一个返回值,而用宏可以设法得到几个结果。(例9.4 ); 说明: 如果善于利用宏定义,可以实现程序的简化,如事先将程序中的“输出格式”定义好,以减少在输出语句中每次都要写出具体的输出格式的麻烦。;9.2 文件包含;9.2 文件包含;9.2 文件包含;9.2 文件包含;概念:所谓“条件编译”,是对部分内容指定编译的条件,使其只在满足一定条件才进行编译。; 9.3 条件编译 ;例: 条件编译#if的使用。 #include stdio.h #define PI 3.14159 #define R 1 void main() { float c,r,s; printf (input a number: ); scanf(%f,c); #if R r=PI*c*c; printf(area of round is %f\n,r); #else s=c*c; printf(area of square is %f\n,s); #endif };THE END

文档评论(0)

1亿VIP精品文档

相关文档