- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 预处理命令
C语言的重要功能,它由预处理程序负责完成,是C语言区别于其他高级语言的又一特征。 预处理语句都以#开始。 合理使用预处理功能可以使程序员更容易地开发程序,也使开发出来的程序易于阅读、修改、调试和移植,有利于模块化程序设计技术的实现。 7.1 宏定义 定义:用#define指定的标识符表示一个字符串被称为宏定义。指定的标识符称为宏(Macro)或宏名,宏名所代表的字符串称为宏体。 功能:宏定义位置以后的所有宏名标识符都将用宏体字符串替代,这一过程称为宏代换、宏替换或宏展开。 宏定义≠宏代换:宏定义由宏定义命令完成,宏代换由预处理程序自动完成。 7.1.1 无参宏定义 宏定义的格式:#define 宏名 宏体 宏调用的方法:在非字符串内用宏名代表宏体字符串的操作。 宏替换的过程:对宏定义后的程序代码,用宏体替换所有宏名标识符的过程。 宏体的本质:字符符号串。它可以由数值型常数、表达式和格式串等构成。 宏的运用情景:可以对程序中反复使用的表达式或程序代码段进行宏定义。 例如:#define M (n*n+3*n) 宏定义后,M代表串“(n*n+3*n)”; 此后,源程序代码中非字符串内的所有表达式串“(n*n+3*n)”在书写上都可用宏名M代替。 在对源程序进行编译预处理时,将先用(n*n+3*n)表达式串去置换源程序中的所有宏名符号M,再进行编译。 例7-1 宏替换实例。 #include stdio.h #define M (n*n+3*n) /*用(n*n+3*n)替换M宏名*/ int main(void) { int nResult,n; printf(input a number: ); scanf(%d,n); nResult=3*M+4*M+5*M;/*所有M宏名将被替换*/ printf(nResult=%d\n,nResult); return 0; } /*End of main()*/ 宏展开只是简单的符号串替换。 若宏体为表达式,两边的括号不能少。 宏定义行的行末不能加分号。否则,分号属于宏体字符串。 宏名和宏体间可有多个空格字符,但宏体串以新行开始为终止。宏体串超过一行时,可用续行命令(\)接续。 宏定义既可以在函数体外,也可以在函数体内。但最好在函数体外。 宏的默认作用域为宏定义命令行到源程序文件末尾。要人为终止宏的作用,可在终止位置处用#undef预处理命令标记。 宏名引用若用双引号括住,预处理程序不对其作宏替换。 宏定义允许嵌套,即在宏定义串中引用已定义过的宏名。在宏展开将层层代换。 习惯上宏名用大写字母标识符表示,以区别于一般变量名。 宏定义通常集中置于程序文件的开始或单独的一个文件中。 宏名可表示数据类型,使书写方便或定制程序员习惯的程序编写习惯。 有时,宏定义可减少书写麻烦。 7.1.2 带参宏定义* 宏定义格式:#define 宏名(形参表) 宏体 宏调用格式:宏名(实参表); 带参宏的形参和实参:宏定义中的参数称为形式参数,宏调用中的参数称为实际参数。 带参数的宏在宏展开时要用实参符号串去替代宏体中的形参符号串。带参的宏又被称为函数宏(Function-macro)。 例7-6 带参数的宏定义和宏调用方法。 #define M(n) n*n+3*n …… k=M(5); …… 例7-7 带参数的宏定义和宏调用。 #include stdio.h #define MAX(num1,num2) \ (num1num2)?num1:num2 int main(void) { int m,n,max; printf(Input two numbers: ); scanf(%d%d,m,n); max=MAX(m,n); printf(max=%d\n,max); return 0; } /*End of main()*/ #include stdio.h #define MAX (num1,num2) \ (num1num2)?num1:num2 int main(void) { int m=2,n=7; printf(m=%d n=%d MAX=%d\n, \ m,n,MAX(m,n)); return 0; } /*End of main()*/ #include stdio.h #define PRINT1 printf(m=%d n=%d\n,m,n); \ m++; n++; printf(
文档评论(0)