资源描述:
《工学预处理ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章预处理命令计算机基础教学部主要内容9.1宏定义9.2“文件包含”处理计算机基础教学部基本概念C提供的预处理功能主要有以下三种:1.宏定义2.文件包含3.条件编译这些功能分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“#”开头。例如:#define#include计算机基础教学部不带参数宏定义一般形式:#define标识符字符串功能:用指定标识符(宏名)代替字符序列(宏体)如#defineYES1#defineNO0#definePI3.1415926#defineOUTprintf(“Hello,World”);定义位置:任意(一般在函数外面)
2、作用域:从定义命令到文件结束#undef可终止宏名作用域格式:#undef宏名9.1宏定义例#defineYES1main(){……..}#undefYES#defineYES0max(){……..}YES原作用域YES新作用域计算机基础教学部例#defineKUAN80#defineCHANGKUAN+40var=CHANG*2;宏展开:var=80+40*2;如if(x==YES)printf(“correct!”);elseif(x==NO)printf(“error!”);展开后:if(x==1)printf(“correct!”);elseif(x==0)printf(“
3、error!”);宏展开:预编译时,用宏名替换字符串---不作语法检查宏定义可嵌套,不能递归例#defineMAXMAX+10()双引号中的内容与宏名相同也不置换例#definePI3.14159printf(“2*PI=%f”,PI*2);宏展开:printf(“2*PI=%f”,3.14159*2);宏定义中使用必要的括号()()()例#defineKUAN80#defineCHANGKUAN+40var=CHANG*2;宏展开:var=80+40*2;不带参数宏定义9.1宏定义计算机基础教学部带参数宏定义一般形式:#define宏名(参数表)字符串宏展开:形参用实参换,其它
4、字符保留例#defineS(a,b)a*b………..area=S(3,2);宏展开:area=3*2;例#definePOWER(x)x*xx=4;y=6;z=POWER(x+y);宏展开:z=x+y*x+y;一般写成:#definePOWER(x)(x)*(x)宏展开:z=(x+y)*(x+y);9.1宏定义计算机基础教学部#defineMAX(x,y)(x)>(y)?(x):(y)…….main(){inta,b,c,d,t;…….t=MAX(a+b,c+d);……}宏展开:t=(a+b)>(c+d)?(a+b):(c+d);intmax(intx,inty){return(x>y?x:y
5、);}main(){inta,b,c,d,t;…….t=max(a+b,c+d);………}例:用宏定义和函数实现同样的功能9.1宏定义计算机基础教学部功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或#include<文件名>#include“file2.c”file1.cfile2.cfile1.cfile2.cABA处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译9.2文件包含计算机基础教学部被包含文件内容源文件(*.c)头文件(*.h)文件包含可嵌套#include“file2.c”file1.cAfile
6、3.cC#include“file3.c”file2.cBfile1.cACB9.2文件包含计算机基础教学部课堂练习<练>执行下面程序后,a的值是()#include#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d",a);}A.10B.1C.9D.0计算机基础教学部课堂练习<练>执行下面程序后,输出结果是()#include#defineN4+1#defineMN*2+N#defineRE5*M+M*Nmain(){printf("%d",RE/2);}A.
7、150B.100C.41D.以上结果都不对计算机基础教学部