- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言——条件编译的
第九章;回顾;指针的算术运算的含义是指针的移动,将指针执行加上或者减去一个整数值n的运算相当于指针向前或向后移动n个数据单元
指针可以执行比较相等的运算,用来判断两个指针是否指向同一个变量
指向数组的指针,存储的是数组中元素的地址。;目标; 预处理命令是由ANSI C统一规定的,但是它不是C语言本身的组成部分,不能直接对它们进行编译。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”, 即根据预处理命令对程序作相应的处理。
经过预处理后程序不再包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。
现在使用的许多C编译系统都包括了预处理、编译和连接等部分,在进行编译时一气呵成。因此不少用户误认为预处理命令是C语言的一部分,甚至以为它们是C语句,这是不对的。
C提供的预处理功能主要有以下三种:
1. 宏定义
2. 文件包含
3. 条件编译
为了与一般C语句相区别,这些命令以符号“#”开头。;9.1 宏定义;例 9.1;9.1 宏定义;9.1 宏定义;9.2带参数的宏定义 ;例 9.2 ; 对于带参数的宏定义有以下问题需要说明:
(1)带参宏定义中,宏名和形参表之间不能有空格出现。
例如:
#define S2(a,b) (a)*(b)
写为:
#define S2 (a,b) (a)*(b)
将被认为是无参宏定义,宏名S2代表字符串 (a,b) (a)*(b)。宏展开时,宏调用语句成为:
s20=(a,b) (a)*(b)(a,b);
这显然是错误的。
(2)在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。这与函数调用中的情况是不同的。在函数调用中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值传递给形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。
(3) 在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。;宏定义还可以解除,解除宏定义的一般形式为:
#undef 宏名
其中,#undef是关键字,宏名是在此前定义过的。功能是解除前面已定义的宏,使之不再起作用,也就是说宏有它的作用域。;9.2文件包含 ;例 9.3 ;#include stdio.h
#include “area.h”
void main()
{
double r,a,b,x,y,s10,s20,s30;
printf(“请输入圆的半径r:”);
scanf(“%lf”,r);
printf(“请输入矩形的长和宽a,b:”);
scanf(“%lf%lf”,a,b);
printf(“请输入三角形的底和高x,y:”);
scanf(“%lf%lf”,x,y);
s10=S1(r);
s20=S2(a,b);
s30=S3(x,y);
printf(“圆的面积=%lf\n”,s10);
printf(“矩形的面积=%lf\n”,s20);
printf(“三角形的面积=%lf\n”,s30);
};【注意点】
#include “area.h”写成:#include area.h时,第一次编译可能产生如下错误:
fatal error C1083: Cannot open include file: ‘area.h’: No such file or directory;9.3条件编译 ;例 9.4 ;#ifdef S2 //因S2(a,b)没有定义,所以不能输出矩形的面积
{ double a,b,s20;
printf(“请输入矩形的长和宽a,b:”);
scanf(“%lf%lf”,a,b);
s20=S2(a,b);
printf(“矩形的面积=%lf\n”,s20);
}
#endif
#ifdef S3 //因S3(a,b)没有定义,所以不能输出三角形的面积
{ double x,y,s30;
printf(“请输入三角形的底和高x,y:”);
scanf(“%lf%lf”,x,y);
s30=S3(x,y);
printf(“三角形的面积=%lf\n”,s30);
}
#endif
};【注意点】
(1)不带参数与带参数的宏定义在条件编译格式1中的使用格式都一样:
#ifdef 宏名
带参数的宏中的参数不能含有,请读者上机操作。
(2)程序中#ifdef …… #else …… #endif可以用嵌套方式。本例
您可能关注的文档
最近下载
- 高校智慧教室实验儿童教育室实训平台项目交货方案及时间进度计划安排.pdf VIP
- 党员杨善洲先进事迹.PPT VIP
- DB3301T 0170-2018 道路交通指示标识英文译写规范.docx VIP
- 中国普通型客衣专用洗衣粉行业市场规模及未来投资方向研究报告.pdf VIP
- 遗传与进化《第4章 生物的进化》大单元整体教学设计.docx VIP
- MZ∕T 137-2019 遗体冷冻柜通用技术条件.pdf VIP
- 合成生物学-全套PPT课件.pptx VIP
- 教材专家评审意见表(模板).doc VIP
- 《医院用磁浮式安全电装置核心技术规范及数智化管理云平台规范》.pdf VIP
- JJF(陕) 051-2021 机动车 GNSS 区间测速监测系统标准装置校准规范.docx VIP
文档评论(0)