- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * 第八章 编译预处理 编译预处理(命令): #号开头的一些命令,在编译开始之前得到处理, 用以辅助编译器的编译工作。 一条编译预处理命令占用一行,其结尾不使用“;” 作为结束符。 C语言提供以下三种编译预处理命令:宏定义、文 件包含、条件编译。 编译预处理 宏定义:使用标识符来替代字符串。 其中标识符成为宏名,宏名习惯用大写字母。 宏定义: 不带参数的宏定义 带参数的宏定义 宏定义 不带参数的宏定义 定义格式: #define 宏名 字符串 例:#define PI 3.1415926 s=2*PI*8; 说明: 字符串可以是任意字符串。 不带参数的宏定义 说明: 宏定义可以放在源程序的任意位置,但应该放在使用宏名的函数之前。 可以嵌套定义 例:#define A 3 #define B A/2 不带参数的宏定义 说明: 在宏定义的字符串中有运算符时,为保证替换结果正确,可在适当位置加上括号。 例:#define SUM 3+4+5 #define SUM (3+4+5) s=SUM/2; s=3+4+5/2 s=(3+4+5)/2 不带参数的宏定义 说明: 在字符串常量中出现的与宏名相同的字符串不认为是宏。 例:#define S (3+4+5) printf(“S=%d\n”,S); printf(S=%d\n,(3+4+5)); 不带参数的宏定义 说明: 宏名的作用域从定义开始到文件结束为止,但也可以用#undef结束宏定义。 例:#define PI 3.1415926 main( ) { …… } #undef PI f( ) { …… } 不带参数的宏定义 说明: 如果宏定义中的字符串过长,可以加“\”(续行符)进行换行。 例:#define STR “In this part there is a short \ passage with five questions.” printf(STR); 带参数的宏定义 定义格式: #define 宏名(参数表) 字符串 例: #define PI 3.1415926 #define S(r2,r1) PI*(r2*r2-r1*r1) area=S(5,3); area=3.1415926*(5*5-3*3); 带参数的宏定义 说明: 在宏定义的字符串中有运算符时,为保证替换结果正确,可给字符串中参数加上括号。 例:#define S(r2,r1) PI*(r2*r2-r1*r1) #define S(r2,r1) PI*((r2)*(r2)-(r1)*(r1)) area=S(5+4,4+3); area=3.1415926*(5+4*5+4-4+3*4+3); area=3.1415926*((5+4)*(5+4)-(4+3)*(4+3)); 带参数的宏定义 说明: 如果宏调用的结果还与其它的操作数进行运算,为保证替换结果正确,可在宏定义的字符串外加上括号。 例:#define A(r1,r2) r1+r2 #define A(r1,r2) (r1+r2) b=A(2,4)/2; b=2+4/2; b=(2+4)/2; #define ISODD(a) (((a)%2==1)?1:0) main() { int a,i,sum=0; for(i=1;i=10;i++) { scanf(%d,a); if(ISODD(a)) sum=sum+a; } } 函数和带参数的宏定义的关系: (1)函数调用需进行控制转移而带参数宏不需要。 (2)函数有数据类型,带参数的宏的类型随实参类型而定。 (3)调用对实参有类型要求,宏定义的实参无类型要求。 (4)带参数的宏的使用不存在参数传递。 (5)使用宏使程序占用的内存空间增大。 (6)使用函数比使用带参数的宏执行效率低。 带参数的宏定义 文件包含的两种形式: (1)#include “包含文件名” /*从当前目录和系统路径搜索被包含文件*/ (2)#include 包含文件名 /*系统路径搜索被包含文件*/ 文件包含的作用是把
原创力文档


文档评论(0)