- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                第九章  预处理命令 9.1  宏定义 9.2  文件包含 9.3  条件编译 9.1  宏定义 9.1.1  不带参的宏定义 1.  形式:#define    标识符   字符串 例 #define   PRICE   30      #define   NUMBER   10      #define   TOTAL   PRICE*NUMBER      main( )      {printf(“TOTAL=%d\n”, TOTAL);} 预编译后,程序为:       main( )       {printf(“TOTAL=%d\n”, 30*10);} 2.  说明: (1)不带参的宏常用来定义符号常量。 (2)同一宏名可被重复定义,以最后的定义为准。 (3)宏定义时,可引用已定义的宏名,层层置换。 (4)宏展开时,只做简单的宏替换,不做任何语法检查或运算。 (5)双引号内的宏名不被置换。 (6)宏名的有效范围是从定义开始到文件结束,可用命令“#undef    标识符”来终止作用域。 (7)一个命令只定义一个宏。 9.1.2  带参的宏定义 1.  形式:#define   宏名(参数表)   包含参数的字符串 例 若有宏定义:#define   s(a,b)   a*b      且使用该宏:area=s(3,2);      则预编译后,宏展开为:area=3*2; 2.  宏如何展开                                                                          #define   s(a,b)   a*b                   area=s(3,2); 例 #define   PI   3.14      #define   s(r)   PI*r*r      main( )      {float  a=3.6, area;        area=s(a);    /*area=3.14*3.6*3.6;*/        printf(“area=%f\n”, area);       } 若main函数改为:      main( )      {float  a=3.6, b=6.4, area;        area=s(a+b);    /*area=3.14*3.6+6.4*3.6+6.4;*/        printf(“area=%f\n”, area);       } 3.  说明: (1)带参宏展开时,只是用实参简单地替换形参,并不会计算出实参值。 (2)宏定义时,包含参数的字符串中的参数外面最好加一括弧。如: #define    s(r)    PI*(r)*(r) (3)带参宏定义时,宏名与括号之间不能加空格。    若有定义: #define   s   (r)   PI*r*r    则变为无参宏,展开为:area=(r)   PI*r*r(a); 4.  函数与带参宏的区别: (1)函数调用时,要先自右而左计算出实参值;而带参宏展开时,只做简单的字符替换,不计算实参值。 (2)函数的调用是在运行时进行的,且为形参分配存储空间;而宏展开是在预编译时进行的,并不为形参分配存储空间。 (3)对于函数,要给出参数的类型;而宏则不存在类型问题。 例 #define   N   2+1      #define   M   (N+1)*N/2      main( )      {int  j;        for(j=1; jM; j++)           printf(“%2d”, j);        } 9.2  文件包含 1.  形式: ① #include 文件名 ② #include“文件名” 第一种形式用于库函数,第二种多用于用户自定义函数。 功能:预编译时,将被包含文件的内容全部复制到包含文件中。  说明: 若被包含文件修改了,则包含此文件的所有文件要重新编译。 文件包含可嵌套P196。 一个命令只包含一个文件,且要注意包含顺序。       若文件1包含文件2,而文件2中要使用文件3的内容,则在文件1中应使用命令:       #include “file3.h”       #include “file2.h”  9.3  条件编译 源程序中的一部分内容只在满足一定条件时才进行编译。 三种形式及功能  #ifdef   标识符                程序段1       #else                程序段2       #endif      若宏定义了标识符,则执行程序段1;否则,执行程序段2。 2.   #ifndef   标识符    
                
原创力文档
                        

文档评论(0)