中国高校课件下载中心 》 教学资源 》 大学文库

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

文档信息
资源类别:文库
文档格式:PPTX
文档页数:23
文件大小:92.62KB
团购合买:点击进入团购
内容简介
南京航空航天大学:《程序设计》课程教学课件(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

共23页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档