南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)09 编译预处理和多文件项目

编译预处理和多文件项目版权所有@陈暂保留所有权利陈哲版权所有陈哲保留所有权利
版 权 所 有 © 陈 哲 保 留 所 有 权 利 版权所有© 陈哲 保留所有权利 编译预处理和多文件项目 陈哲

>编译预处理>宏定义>文件包含>条件编译>多文件项目版权所有@陈哲保留所有权利版权所有陈哲保留所有权利2
版权所有© 陈哲保留所有权利 版权所有 © 陈哲 保留所有权利 2 ➢编译预处理 ➢宏定义 ➢文件包含 ➢条件编译 ➢多文件项目

编译预处理>编译预处理:在编译之前对源程序进行处理,生成扩展的源程序>指令种类:宏定义#define1文件包含#include条件编译#if-#else-#endif服权所有@陈替保留所有权利>1语法:#开头,语句尾不加分号3
版 权 所 有 © 陈 哲 保 留 所 有 权 利 编译预处理 ➢编译预处理:在编译之前对源程序进行 处理,生成扩展的源程序。 ➢指令种类: ◦宏定义 #define ◦文件包含 #include ◦条件编译 #if-#else-#endif ➢语法:#开头,语句尾不加分号。 3

宏定义宏体可省略表示空文本>不带参数的宏定义o语法:#define宏名[宏体]。宏名是一个标识符宏体是任意文本语义:在编译预处理阶段将代码中出现的宏名替换为宏体中的文本。版权所有@陈暂保留所有权利4
版 权 所 有 © 陈 哲 保 留 所 有 权 利 宏定义 ➢不带参数的宏定义 ◦语法:#define 宏名 [宏体] ◦宏名是一个标识符 ◦宏体是任意文本 ◦语义:在编译预处理阶段将代码中出现 的宏名替换为宏体中的文本。 4 宏体可省略, 表示空文本

>例:#include #define ONE 1int mainOint x = l;if (x == ONE)printf("oneln");.版权所有@陈暂保留所有权利0;returnaftermacro expansion1)if(x ==printf("oneln");5
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢例: #include #define ONE 1 int main() { int x = 1; if (x == ONE) printf("one\n"); return 0; } 5 // after macro expansion if (x == 1) printf("one\n");

>注意:编译器不扩展字符串常量中的宏名。例:#define PI 3. 1415printf("PI = %f\n",PI);展开后:printf("PI = %f\n", 3.1415);宏定义可嵌套,但是不能递归。例:版权所有@陈暂保留所有权利#define A l#define B A+l // OK#define N N+2 // Wrong6
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢注意: ◦编译器不扩展字符串常量中的宏名。例: #define PI 3.1415 printf("PI = %f\n", PI); 展开后: printf("PI = %f\n", 3.1415); ◦宏定义可嵌套,但是不能递归。例: #define A 1 #define B A+1 // OK #define N N+2 // Wrong 6

>例:宏体中要使用必要的括号#include int mainOJ80#define WIDTH#define LENGTH(WIDTH+40)int x = LENGTH * 2;版权所有@陈暂保留所有权利printf("%d", x);return O;afterexpansionmacro(80+40)* 2;intX=
版权所有© 陈哲保留所有权利 ➢例:宏体中要使用必要的括号。 #include int main() { #define WIDTH 80 #define LENGTH WIDTH+40 int x = LENGTH * 2; printf ("%d", x); return 0; } 7 #define LENGTH (WIDTH+40) // after macro expansion int x = 80+40 * 2; x = (80+40) * 2;

>带参数的宏定义?语法:#define 宏名(形参列表)宏体·形参列表中的参数名用逗号隔开语义:在编译预处理阶段将代码中出现的宏名和实参替换为宏体中的文本,并且宏体中的形参被替换为实参例:宏名和参数列表中间不能有空格a*b#defineAREA(a, b)版权所有@陈暂保留所有权利1tint area = AREA(3, 2);宏展开后: int area = 3*2;8
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢带参数的宏定义 ◦语法:#define 宏名(形参列表) 宏体 ◦形参列表中的参数名用逗号隔开 ◦语义:在编译预处理阶段将代码中出现 的宏名和实参替换为宏体中的文本,并 且宏体中的形参被替换为实参。 例: #define AREA(a, b) a*b int area = AREA(3, 2); 宏展开后: int area = 3*2; 8 宏名和参数列表 中间不能有空格

>例:宏体中要使用必要的括号#include #define SQUARE(x)((x)*(x))int mainint x = l, y = 2, z;z = SQUARE(x + y) :版权所有@陈暂保留所有权利printf("%dln", z);return O;after macro expansion((x + y)*(x + y)) ;z =9
版权所有© 陈哲保留所有权利 ➢例:宏体中要使用必要的括号。 #include #define SQUARE(x) x*x int main() { int x = 1, y = 2, z; z = SQUARE(x + y); printf ("%d \n", z); return 0; } 9 // after macro expansion z = x + y*x + y; #define SQUARE(x) ((x)*(x)) z = ((x + y)*(x + y));

>取消宏定义o语法:#undef 宏名·语义:终止宏名的作用域,使得后面的代码无法使用该宏名。#include#define PI 3.14int main(1PI原作用域printf("%fln",PI);版权所有@陈暂保留所有权利#undefPI此处不能使用PI#define PI 3.1415printf("%f)n",PI);PI新作用域return O;10
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢取消宏定义 ◦语法:#undef 宏名 ◦语义:终止宏名的作用域,使得后面的 代码无法使用该宏名。 #include #define PI 3.14 int main() { printf("%f\n", PI); #undef PI #define PI 3.1415 printf("%f\n", PI); return 0; } 10 PI原作用域 PI新作用域 此处不能使用PI
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)08 文件.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)07 记录类型.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)06 数组.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)05 函数.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)04 控制流.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)03 运算符和表达式.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)02 常量和变量.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)01 计算机和程序.pptx
- 《程序设计》课程教学资源(实验指导)C++语言习题集(南京航空航天大学:陈哲).pdf
- 《程序设计》课程教学资源(书籍文献)Google开源项目风格指南(中文版).pdf
- 长春大学:旅游学院:《Visual FoxPro程序设计》课程教学资源(授课教案,共七章).pdf
- 《计算机导论》课程教学资源(授课教案,教材讲义,共六章).pdf
- 江苏大学:RISC-V CPU设计实验(讲义).pdf
- 黄河水利职业技术大学:《电商网站建设与优化》课程思政教案(教学设计)PHP动态网站开发.pdf
- 沈阳师范大学:《单片机原理与接口技术应用》课程教学资源(PPT课件)第09章 SPI与I2C串行总线.ppt
- 沈阳师范大学:《单片机原理与接口技术应用》课程教学资源(PPT课件)第08章 USART串行通信.ppt
- 沈阳师范大学:《单片机原理与接口技术应用》课程教学资源(PPT课件)第07章 模数转换器(ADC).ppt
- 沈阳师范大学:《单片机原理与接口技术应用》课程教学资源(PPT课件)第06章 定时器.ppt
- 沈阳师范大学:《单片机原理与接口技术应用》课程教学资源(PPT课件)第05章 通用输入输出接口GPIO.pptx
- 沈阳师范大学:《单片机原理与接口技术应用》课程教学资源(PPT课件)第04章 中断系统.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 1-C++程序设计基础.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 2-文件操作.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 3-类的基础部分.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 4-类的高级部分.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 5-继承多态和虚函数.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 6-异常处理.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 7-模板.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 8-标准模板库STL.ppt
- 揭阳职业技术学院:《Linux操作系统》课程教学资源(实验教案,共十八个).pdf
- 揭阳职业技术学院:《计算机应用基础》课程授课教案.pdf
- 揭阳职业技术学院:《物联网》课程授课教案.pdf
- 揭阳职业技术学院:《程序设计基础》课程授课教案.pdf
- 揭阳职业技术学院:《办公自动化》课程授课教案.pdf
- 揭阳职业技术学院:《图像处理》课程授课教案.pdf
- 揭阳职业技术学院:《计算机应用基础》课程授课教案.pdf
- 揭阳职业技术学院:《Photoshop制图》课程授课教案.pdf
- 清华大学:《计算机图形学基础》课程教学大纲 Fundamental of Computer graphics(负责人:胡事民).pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)图形学简介.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)视图模型变换.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)双向反射分布函数.pdf
